2016-05-17 58 views
0

解决方案:如果直接从Azure SQL Server使用jdbc连接字符串,请将数据库url后的“database = ...”更改为“databaseName = ..” 。“并解决了这个问题。当我尝试通过Android应用程序向数据库插入数据时,Invaled Object Name异常

我想在我的Android应用程序上使用Azure SQL数据库。

Connection con = basla.returnCon(); 
Statement statement = con.createStatement(); 
statement.executeQuery("INSERT INTO test VALUES ('lol') "); 

“basla” 是我的AsyncTask对象,并通过getCon返回连接(),以 “CON”。

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 

this.con = DriverManager.getConnection("jdbc:jtds:sqlserver://walky.database.windows.net:1433;database=Walky;user=***@walky;password=***;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"); 

这是我的连接字符串,你可以看到默认的数据库连接是“Walky”。

Walky Database

并没有在我的数据库 “测试” 表。

现在,当我尝试

statement.executeQuery("INSERT INTO test VALUES ('lol') "); 

此,抛出异常“Invaled对象名称‘测试’

statement.executeQuery("USE Walky INSERT INTO test VALUES ('lol') "); 

此,抛出约,我不能使用异常”使用“的语句和我必须创建另一个数据库的另一个连接。

statement.executeQuery("INSERT INTO [Walky].[dbo].[test] VALUES ('lol') "); 

此,抛出异常有关Walky.dbo.tes t不是我的sql服务器版本的兼容参考。我也试过Edit -> IntelliSense -> Refresh Local Cache

我可以通过SQL Server Management Studio插入数据,但无法使用我的Android应用程序执行此操作。

有没有我失踪或做错了?

谢谢你,对不起我的英文不好。

回答

0

因为你的查询是针对插入数据,你应该使用executeUpdate - 假设你的查询字符串在你的表结构来说是正确的,你可以做这样的事情:// 改变你的连接字符串:

`this.con = DriverManager.getConnection("jdbc:jtds:sqlserver://walky.database.windows.net:1433;databaseName=Walky;user=***@walky;password=***;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;");` 
    ... 
    Statement statement = con.createStatement(); 
    int rowsAffected = statement.executeUpdate("INSERT INTO test VALUES ('lol') "); 
    //here you could check rowsAffected as an indication that the values were persisted 

方法executeUpdate返回一个整数,它表示受SQL语句影响的行数,当您有INSERT,DELETE或UPDATE SQL语句时应使用该整数。请看here。我希望这有帮助。

+0

不能再次抛出java.sql.SQLException:入侵对象名称't​​est'。 – ReadyFreddy

+1

你说你的'Walky'数据库中存在'test'表吗?尝试改变你的连接字符串来指定'databaseName'而不是'database'就像你拥有它。您的连接字符串将如下所示:'this.con = DriverManager.getConnection(“jdbc:jtds:sqlserver://walky.database.windows.net:1433; databaseName = Walky; user = *** @ walky; password = * **;加密= TRUE; trustServerCertificate = FALSE; hostNameInCertificate = * database.windows.net; loginTimeout = 30;“);'。我已经更新了我的答案。 – ishmaelMakitla

+0

谢谢!将“数据库”更改为“databaseName”即可解决此问题。添加解决方案到我的文章。 – ReadyFreddy

相关问题