android 参照 InboundActivity.java 文件的如下代码数据库连接框架,
写一个 查询界面 : 查询语句如下:select CINVCODE,storage_space from AA_Product_data_Details where CINVCODE = '41223'
将查询结果显示到界面上。界面 支持 CINVCODE 字段 的 条件查询,可以为空。会返回多条记录。 不要用异步。要同步查询返回到界面表格里面。
相机逻辑代码不要。只要查询逻辑代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- 查询条件输入框 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CINVCODE:"/>
<EditText
android:id="@+id/et_query_cinvcode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="输入查询条件(可为空)"
android:imeOptions="actionSearch"
android:singleLine="true"/>
<Button
android:id="@+id/btn_query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"/>
</LinearLayout>
<!-- 查询结果表格 -->
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp">
<TableLayout
android:id="@+id/table_results"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:shrinkColumns="*">
<!-- 表头将通过代码动态添加 -->
</TableLayout>
</HorizontalScrollView>
</LinearLayout>
package com.example.chuwei_update_new;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class QueryActivity extends AppCompatActivity {
private EditText etQueryCinvCode;
private Button btnQuery;
private TableLayout tableResults;
// 数据库配置
private static final String DB_SERVER = "192.168.xxxx";
private static final String DB_NAME = "UFDATA_xxxx";
private static final String DB_USER = "sa";
private static final String DB_PASSWORD = "xxxx";
private static final String DB_URL = "jdbc:jtds:sqlserver://" + DB_SERVER + "/" + DB_NAME;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_query);
// 初始化UI组件
etQueryCinvCode = findViewById(R.id.et_query_cinvcode);
btnQuery = findViewById(R.id.btn_query);
tableResults = findViewById(R.id.table_results);
// 设置查询按钮点击事件
btnQuery.setOnClickListener(v -> executeQuery());
// 设置键盘搜索按钮监听
etQueryCinvCode.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
executeQuery();
return true;
}
return false;
});
}
// 执行数据库查询
private void executeQuery() {
// 获取查询条件
String cinvCode = etQueryCinvCode.getText().toString().trim();
// 清空之前的查询结果
tableResults.removeAllViews();
try {
// 同步执行数据库查询
List<Map<String, String>> results = performDatabaseQuery(cinvCode);
if (results.isEmpty()) {
Toast.makeText(this, "未找到匹配的记录", Toast.LENGTH_SHORT).show();
return;
}
// 创建表头
TableRow headerRow = new TableRow(this);
for (String column : results.get(0).keySet()) {
TextView header = new TextView(this);
header.setText(column);
header.setPadding(10, 10, 10, 10);
header.setBackgroundResource(
R.drawable.table_header_bg); // 创建表头背景样式
header.setTextColor(getResources().getColor(android.R.color.white));
headerRow.addView(header);
}
tableResults.addView(headerRow);
// 填充查询结果
for (Map<String, String> row : results) {
TableRow dataRow = new TableRow(this);
for (String value : row.values()) {
TextView data = new TextView(this);
data.setText(value != null ? value : "N/A");
data.setPadding(10, 10, 10, 10);
data.setBackgroundResource(R.drawable.table_cell_bg); // 创建单元格背景样式
dataRow.addView(data);
}
tableResults.addView(dataRow);
}
} catch (Exception e) {
Toast.makeText(this, "查询失败: " + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
// 执行数据库查询操作
private List<Map<String, String>> performDatabaseQuery(String cinvCode)
throws ClassNotFoundException, SQLException {
List<Map<String, String>> results = new ArrayList<>();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
// 1. 加载数据库驱动
Class.forName("net.sourceforge.jtds.jdbc.Driver");
// 2. 建立数据库连接
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 3. 构建SQL查询语句
String sql = "SELECT CINVCODE, storage_space FROM AA_Product_data_Details";
if (!cinvCode.isEmpty()) {
sql += " WHERE CINVCODE = ?";
}
// 4. 创建PreparedStatement
stmt = conn.prepareStatement(sql);
if (!cinvCode.isEmpty()) {
stmt.setString(1, cinvCode);
}
// 5. 执行查询
rs = stmt.executeQuery();
// 6. 处理结果集
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while (rs.next()) {
Map<String, String> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
row.put(columnName, rs.getString(i));
}
results.add(row);
}
} finally {
// 7. 关闭资源
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
return results;
}
}