2017-03-26 142 views
0

AndroidアプリからSQLサーバーデータベースに接続しようとしています。接続が動作しますが、表のためにexpectionが発生します。テーブルを参照するときに「オブジェクト名が無効です」

java.sql.SQLException:無効なオブジェクト名 'dbo.Names'です。

私は、サーバーに送信するSQLコードは

stmt.execute("INSERT INTO [dbo].[Names] ([name]) VALUES ('Test')"); 

任意のアイデアですか?

EDIT:

static String serverIp = "xxx.database.windows.net:1433"; 
static String serverDb = "xxxApp"; 
static String serverUserName = "xxx"; 
static String serverPassword = "xxx"; 

Connection con; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    CheckLogin checkLogin = new CheckLogin(); 
    checkLogin.execute(""); 

} 

public class CheckLogin extends AsyncTask<String, String, String> { 

    String z = ""; 
    Boolean isSuccess = false; 

    @Override 
    protected void onPreExecute() { 

    } 

    @Override 
    protected void onPostExecute(String r) { 

    } 

    @Override 
    protected String doInBackground(String... params) { 

     try { 
      con = connectionclass(serverUserName, serverPassword, serverDb, serverIp); 

      if (con == null) { 
       z = "Check Internet Access"; 
      } else { 

       Statement stmt = con.createStatement(); 
       stmt.execute("INSERT INTO [dbo].[Names] ([name]) VALUES ('Test')"); 

       String x = ""; // DEBUG point 
      } 
     } catch (Exception ex) { 
      isSuccess = false; 
      z = ex.getMessage(); 
     } 

     return z; 
    } 


    @SuppressLint("NewApi") 
    public Connection connectionclass(String user, String password, String database, String server) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     Connection connection = null; 
     String ConnectionURL = null; 
     try { 
      Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
      ConnectionURL = "jdbc:jtds:sqlserver://" + server + ";database=" + database + ";user=" + user + ";password=" + password + ";encrypt=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"; 

      connection = DriverManager.getConnection(ConnectionURL); 
     } catch (SQLException se) { 
      Log.e("error here 1 : ", se.getMessage()); 
     } catch (ClassNotFoundException e) { 
      Log.e("error here 2 : ", e.getMessage()); 
     } catch (Exception e) { 
      Log.e("error here 3 : ", e.getMessage()); 
     } 
     return connection; 
    } 

} 
+0

で説明server:port/databaseフォーマットがい使用する必要がありますそのテーブルはあなたが接続しているデータベースに存在しますか? – TZHX

+0

@TZHXはいそれは – RareBoy

+1

'stmt.getConnection()。getCatalog()'によって返された結果をあなたのアプリケーションに表示させます。あなたはあなたが思っているデータベースには当たらないかもしれません。 –

答えて

1

あなたが実際で指定されたデータベースに接続していないので、あなたがのjTDSのための正しい接続URLの形式を使用していないため、SQLステートメントが失敗している:ここでは

コードですString変数serverDb

あなたはのjTDSが認識しないdatabaseという名前の接続URLパラメータを使用しようとしている。

String serverDb = "myDb"; 
String connUrl = "jdbc:jtds:sqlserver://localhost:49242;database=" + serverDb; 
try (Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd)) { 
    System.out.println(conn.getCatalog()); // prints: master 
} catch (Exception e) { 
    e.printStackTrace(System.err); 
} 

代わりに、あなたはdocumentation

String serverDb = "myDb"; 
String connUrl = "jdbc:jtds:sqlserver://localhost:49242/" + serverDb; 
try (Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd)) { 
    System.out.println(conn.getCatalog()); // prints: myDb 
} catch (Exception e) { 
    e.printStackTrace(System.err); 
} 
+0

これは素晴らしい動作です。ありがとうございました。 – RareBoy

関連する問題