Android &引用;无效的对象名称";参考表格时

Android &引用;无效的对象名称";参考表格时,android,sql,sql-server,jdbc,jtds,Android,Sql,Sql Server,Jdbc,Jtds,我正在尝试从Android应用程序连接到SQL server数据库。连接正常,但由于表的原因,我得到了期望 java.sql.SQLException:对象名称“dbo.Names”无效 我发送到服务器的SQL代码是 stmt.execute("INSERT INTO [dbo].[Names] ([name]) VALUES ('Test')"); 有什么想法吗 编辑: 代码如下: static String serverIp = "xxx.database.windows.net:1433

我正在尝试从Android应用程序连接到SQL server数据库。连接正常,但由于表的原因,我得到了期望

java.sql.SQLException:对象名称“dbo.Names”无效

我发送到服务器的SQL代码是

stmt.execute("INSERT INTO [dbo].[Names] ([name]) VALUES ('Test')");
有什么想法吗

编辑:

代码如下:

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;
    }

}
静态字符串serverIp=“xxx.database.windows.net:1433”;
静态字符串serverDb=“xxxApp”;
静态字符串serverUserName=“xxx”;
静态字符串serverPassword=“xxx”;
连接con;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CheckLogin CheckLogin=新建CheckLogin();
checkLogin.execute(“”);
}
公共类CheckLogin扩展异步任务{
字符串z=“”;
布尔值isSuccess=false;
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的void onPostExecute(字符串r){
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
con=连接类(serverUserName、serverPassword、serverDb、serverIp);
如果(con==null){
z=“检查互联网接入”;
}否则{
语句stmt=con.createStatement();
stmt.execute(“插入[dbo].[name]([name])值('Test')”;
字符串x=”“;//调试点
}
}捕获(例外情况除外){
isSuccess=false;
z=ex.getMessage();
}
返回z;
}
@SuppressLint(“新API”)
公共连接connectionclass(字符串用户、字符串密码、字符串数据库、字符串服务器){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
连接=空;
字符串ConnectionURL=null;
试一试{
类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);
}捕获(SQLSE异常){
Log.e(“此处的错误1:,se.getMessage());
}catch(classnotfounde异常){
Log.e(“此处的错误2:,e.getMessage());
}捕获(例外e){
Log.e(“此处错误3:,e.getMessage());
}
回路连接;
}
}

SQL语句失败,因为您没有为JTD使用正确的连接URL格式,因此您没有实际连接到字符串变量
serverDb
指定的数据库

您正在尝试使用jTDS无法识别的名为
数据库
的连接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
}捕获(例外e){
e、 printStackTrace(System.err);
}
相反,您应该使用中描述的
server:port/database
格式

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
}捕获(例外e){
e、 printStackTrace(System.err);
}

您所连接的数据库中是否存在该表?@TZHX是的,它不会显示您的应用程序通过
stmt.getConnection().getCatalog()返回的结果。
。您可能没有访问您认为是的数据库。@GordThompson getCatalog()返回“master”。。。