如何使用 JDBC 在 ListView 或 TableView 中显示来自 SQL Server 的数据
Posted
技术标签:
【中文标题】如何使用 JDBC 在 ListView 或 TableView 中显示来自 SQL Server 的数据【英文标题】:How to display data from SQL Server in a ListView or TableView using JDBC 【发布时间】:2018-06-08 09:30:58 【问题描述】:我已使用 JTDS v.1.2.8 连接到我的 SQL Server
我是 JDBC 插件的新手,我正在努力解决这个问题。我也确实在论坛上查看了相关的问题/答案,但我找不到,所以我在这里问:)
我想要实现的是,我想以更好的方式显示从 SQL 数据库中获取的数据,例如 listView 或 tableView。
这是我目前正在使用的代码,我真的不知道如何使它工作
Class Model
public class Model
public String nom;
public String prenom;
public String mail;
public String tel;
public String date;
public String caissier;
public String vendeur;
public String estheticienne;;
// Getters and Setters omitted
/////////////////////////////////////// ///////////////////////
public class Magasin extends AppCompatActivity
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_magasin);
Button btn = (Button) findViewById(R.id.btnData);
btn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
GetData retrieveData = new GetData();
retrieveData.execute("");
);
private class GetData extends AsyncTask<String,String,String>
String msg = "";
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://" +
DbStrings.DATABASE_URL + "/" + DbStrings.DATABASE_NAME;
@Override
protected void onPreExecute()
@Override
protected String doInBackground(String... params)
Connection conn = null;
Statement stmt = null;
List<Model> list = new ArrayList<Model>();
try
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DbStrings.USERNAME, DbStrings.PASSWORD);
stmt = conn.createStatement();
String sql = "SELECT * FROM login";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next())
Model utilisateur = new Model();
utilisateur.prenom = rs.getString("prenom");
utilisateur.nom = rs.getString("nom");
utilisateur.mail = rs.getString("email");
utilisateur.tel = rs.getString("tel");
utilisateur.date = rs.getString("date");
utilisateur.caissier = rs.getString("caissiere");
utilisateur.vendeur = rs.getString("vendeuse");
utilisateur.estheticienne = rs.getString("estheticienne");
list.add(utilisateur);
msg = "Données récupérées !";
rs.close();
stmt.close();
conn.close();
catch (SQLException connError)
msg = "An exception was thrown for JDBC.";
connError.printStackTrace();
catch (ClassNotFoundException e)
msg = "A class not found exception was thrown.";
e.printStackTrace();
return msg;
非常感谢任何评论或回答指出我的解决方案。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:不要在主线程上执行服务器操作,这是我项目中的代码
/*JDBC Connection URL*/
private static final String url = "jdbc:mysql://192.168.10.0:8000/etm";
/*JDBC Connection USER NAME*/
private static final String user = "admin";
/*JDBC Connection PASSWORD*/
private static final String pass = "admin";
/*ArrayList to store bus stop names*/
private static ArrayList<String> busStops;
private static class RetrieveSQL extends AsyncTask<Void, Void, ArrayList>
@Override
protected ArrayList doInBackground(Void... voids)
try
Class.forName("com.mysql.jdbc.Driver");
catch (Exception e)
System.err.println("Cannot create connection");
Connection connection;
busStops.clear();
try
connection = DriverManager.getConnection(url, user, pass);
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("select * from stops");
while (rs.next())
busStops.add(rs.getString("c_stop_name"));
catch (Exception e)
System.err.println("Error");
return busStops;
@Override
protected void onPostExecute(ArrayList busList)
super.onPostExecute(busList);
mView.displayBusStopFromMySqlServer(busList);
onPostExecute() 将返回arraylist,将其传递给适配器。
使用 Recyclerview 而不是 Listview
【讨论】:
你说的是哪个适配器? 创建一个扩展 RecyclerView 的适配器 Example :BusAdapter mAdapter = new BusAdapter(busStops, MainActivity.this); recyclerView.setAdapter(mAdapter);
in MainActivity【参考方案2】:
您应该创建一个带有内容行的 ListView,并在带有标题行的布局上方创建一个。并在布局上进行列划分,用于表示 ListView 上的每一行。
另一种方法是在滚动中创建一个 TableLayout!
【讨论】:
以上是关于如何使用 JDBC 在 ListView 或 TableView 中显示来自 SQL Server 的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android ListView上加粗Java中字符串的一部分?
如何在 Flutter 中添加 ListView.builder 的填充顶部?
Android + jdbc连接云服务器的MySQL并采用ListView查看数据