2016-05-17 61 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

相關問題