Android连接到Azure SQL数据库并选择语句
我正在尝试将android移动应用程序连接到Azure portal上的数据库。下面是我的连接类(显然是Azure连接中的正确字段) 我试图从数据库中的表中读取,如下所示:Android连接到Azure SQL数据库并选择语句,android,mysql,sql,sql-server,azure,Android,Mysql,Sql,Sql Server,Azure,我正在尝试将android移动应用程序连接到Azure portal上的数据库。下面是我的连接类(显然是Azure连接中的正确字段) 我试图从数据库中的表中读取,如下所示: public class FillList extends AsyncTask<String, String, String> { String z = ""; List<Map<String, String>> prolist = new ArrayList&
public class FillList extends AsyncTask<String, String, String> {
String z = "";
List<Map<String, String>> prolist = new ArrayList<Map<String, String>>();
@Override
protected void onPreExecute() {
pbbar.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(String r) {
pbbar.setVisibility(View.GONE);
Toast.makeText(AddProducts.this, r, Toast.LENGTH_SHORT).show();
String[] from = { "A", "B", "C" };
int[] views = { R.id.lblproid, R.id.lblproname,R.id.lblprodesc };
final SimpleAdapter ADA = new SimpleAdapter(AddProducts.this,
prolist, R.layout.lsttemplate, from,
views);
lstpro.setAdapter(ADA);
lstpro.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
HashMap<String, Object> obj = (HashMap<String, Object>) ADA
.getItem(arg2);
proid = (String) obj.get("A");
String proname = (String) obj.get("B");
String prodesc = (String) obj.get("C");
edtprodesc.setText(prodesc);
edtproname.setText(proname);
// qty.setText(qtys);
}
});
}
@Override
protected String doInBackground(String... params) {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = "Error in connection with SQL server";
} else {
String query = "select * from Training";
PreparedStatement ps = con.prepareStatement(query);
ResultSet rs = ps.executeQuery();
ArrayList<String> data1 = new ArrayList<String>();
while (rs.next()) {
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("A", rs.getString(1));
data1.add(rs.getString(1));
datanum.put("B", rs.getString(2));
data1.add(rs.getString(2));
datanum.put("C", rs.getString(3));
prolist.add(datanum);
}
z = "Success";
}
} catch (Exception ex) {
z = "Error retrieving data from table";
}
return z;
}
}
公共类填充列表扩展了异步任务{
字符串z=“”;
List prolist=新建ArrayList();
@凌驾
受保护的void onPreExecute(){
pbbar.setVisibility(View.VISIBLE);
}
@凌驾
受保护的void onPostExecute(字符串r){
pbbar.setVisibility(View.GONE);
Toast.makeText(AddProducts.this,r,Toast.LENGTH_SHORT).show();
字符串[]from={“A”、“B”、“C”};
int[]视图={R.id.lblproid,R.id.lblproname,R.id.lblprodesc};
最终SimpleAdapter ADA=新SimpleAdapter(AddProducts.this,
prolist,R.layout.lsttemplate,从,
意见);
lstpro.setAdapter(ADA);
lstpro.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
HashMap obj=(HashMap)ADA
.getItem(arg2);
proid=(字符串)obj.get(“A”);
String proname=(String)obj.get(“B”);
String prodesc=(String)obj.get(“C”);
edtprodesc.setText(prodesc);
edtproname.setText(proname);
//数量设置文本(qtys);
}
});
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
Connection con=connectionClass.CONN();
如果(con==null){
z=“与SQL server连接时出错”;
}否则{
String query=“从培训中选择*”;
PreparedStatement ps=con.prepareStatement(查询);
结果集rs=ps.executeQuery();
ArrayList data1=新的ArrayList();
while(rs.next()){
Map datanum=new HashMap();
datanum.put(“A”,rs.getString(1));
data1.add(rs.getString(1));
datanum.put(“B”,rs.getString(2));
data1.add(rs.getString(2));
datanum.put(“C”,rs.getString(3));
prolist.add(datanum);
}
z=“成功”;
}
}捕获(例外情况除外){
z=“从表中检索数据时出错”;
}
返回z;
}
}
但是,它只运行到异常z:
从表中检索数据时出错
有人能告诉我哪里出了问题吗?是否有其他方法检索此表数据?在Visual Studio中生成并存储在Azure上的表。现在很难说。您是否尝试使用从Java连接到SQLAzure的概念验证教程?你能试试看这是否有效吗?检查您的IP是否在仪表板上SQL Azure防火墙中的“已批准访问”列表中。您能否对其进行编码并查看它在哪一行失败?异常对象ex提供了什么信息?Hi@RichardCL,给出的异常是:java.sql.SQLException:无效的对象名称“Training”。我是SQL的新手,你能帮我解决这个问题吗?好的,这很有用。(1) 您能否编写步骤代码并确认哪个语句引发异常。可能是“ResultSet rs=ps.executeQuery();”,但我想确定一下。(2) 您是否连接到正确的数据库?(3) 培训表属于哪个模式?最好在对象名称前面加上模式前缀,例如“dbo.Training”。(4) 您能否使用SSMS连接到Azure中的数据库并成功执行此查询?一般来说,在您的系统中,您需要在异常中报告或记录信息,否则很难排除故障。
public class FillList extends AsyncTask<String, String, String> {
String z = "";
List<Map<String, String>> prolist = new ArrayList<Map<String, String>>();
@Override
protected void onPreExecute() {
pbbar.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(String r) {
pbbar.setVisibility(View.GONE);
Toast.makeText(AddProducts.this, r, Toast.LENGTH_SHORT).show();
String[] from = { "A", "B", "C" };
int[] views = { R.id.lblproid, R.id.lblproname,R.id.lblprodesc };
final SimpleAdapter ADA = new SimpleAdapter(AddProducts.this,
prolist, R.layout.lsttemplate, from,
views);
lstpro.setAdapter(ADA);
lstpro.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
HashMap<String, Object> obj = (HashMap<String, Object>) ADA
.getItem(arg2);
proid = (String) obj.get("A");
String proname = (String) obj.get("B");
String prodesc = (String) obj.get("C");
edtprodesc.setText(prodesc);
edtproname.setText(proname);
// qty.setText(qtys);
}
});
}
@Override
protected String doInBackground(String... params) {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = "Error in connection with SQL server";
} else {
String query = "select * from Training";
PreparedStatement ps = con.prepareStatement(query);
ResultSet rs = ps.executeQuery();
ArrayList<String> data1 = new ArrayList<String>();
while (rs.next()) {
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("A", rs.getString(1));
data1.add(rs.getString(1));
datanum.put("B", rs.getString(2));
data1.add(rs.getString(2));
datanum.put("C", rs.getString(3));
prolist.add(datanum);
}
z = "Success";
}
} catch (Exception ex) {
z = "Error retrieving data from table";
}
return z;
}
}