Android &引用;无效的对象名称";参考表格时
我正在尝试从Android应用程序连接到SQL server数据库。连接正常,但由于表的原因,我得到了期望 java.sql.SQLException:对象名称“dbo.Names”无效 我发送到服务器的SQL代码是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
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”。。。