JComboBox下拉框弹出JTable问题

刚开始学java一个多月.问题可能比较弱智请大家原谅

主要是制作一个JComboBox下拉框弹出JTable,并且可以实现查询功能
1.制作一个JComboBox,并可以从数据库取出值
2.使JComboBox实现查询功能
3.JComboBox弹出JTable完成.

第一步 制作一个JComboBox,并可以从数据库取出值
出现问题了,感觉是基础的问题.自己写了个JComboBox,但是从数据库取出的每个值都加了[**]还有一个@d8876的乱码(怀疑是列名).代码如下,请高手指出错误.错误纠正后准备放入jtable完善功能.谢谢!!
代码如下:
界面
public class liebiao extends JFrame {
private JComboBox jcbx;
private JPanel jP1;
private JLabel jlb1;
private List list1;
private Vector vct;

private String sql = "select UserName 登陆名 FROM tblSysUser where 1=?";
private String[] paras = { "1" };

public static void main(String[] args) {
// TODO Auto-generated method stub
liebiao lb = new liebiao();
}

public liebiao(){



jP1 =new JPanel();
jlb1 =new JLabel("选择下拉框");
jcbx =new JComboBox();
//getJComboBox();
//设置JComboBox
jcbx.removeAllItems();
jcbx.addItem("选择");
listmodel lh =new listmodel();
lh.listquery(jcbx ,sql, paras);
jcbx.addItem(lh);
jcbx.setEditable(true);

jcbx.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e) {



}

}
);


jP1.add(jlb1);
jP1.add(jcbx);

this.add(jP1);


this.setSize(1024, 768);
// 窗口居中显示
this.setLocationRelativeTo(null);
// 退出的时候关闭,保证程序退出,比较重要,不关闭那么就停留在内存当中影响运行速度.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 显示窗体
this.setVisible(true);

}
}


数据驱动模型
package list;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.table.AbstractTableModel;


public class listmodel extends AbstractTableModel{



private Vector columns;


public void listquery(JComboBox jcbx ,String sql,String[] paras) {

listhelp sh = new listhelp();
ResultSet rs = sh.query(sql, paras);
columns = new Vector();

//此方法便 于扩展
try {
//从rs对象中可以得到一个ResultSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
for(int i=0;i<rsmd.getColumnCount();i++) {
columns.add(rsmd.getColumnName(i+1));
}
//把rs的结果放到rowDate
while(rs.next()) {
Vector temp = new Vector();
for(int i=0;i<rsmd.getColumnCount();i++) {
temp.add(rs.getString(i+1));
}
jcbx.addItem(temp);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return this.columns.size();
}

@Override
public String getColumnName(int column) {
// TODO Auto-generated method stub
return (String)columns.get(column);
}

@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 0;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return null;
}

}


dbhelp
package list;
/*
* 对数据库操作的类
* 对数据库的操作,就是crud
* 调用存储过程
*
*注意:如果连接数据库时出现如下异常则表示未引入三个JAR驱动包,另外一个原因就是SQL语句有语法错误
*java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDviver
* */
import java.util.*;
import java.sql.*;
public class listhelp {

//定义操作数据库需要的东西
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;


String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=test";
String user="sa";
String passwd="123456";


//构造函数
public listhelp(){

try {
//加载驱动
Class.forName(driver);
//得到连接
ct=DriverManager.getConnection(url,user,passwd);
System.out.println("成功加载驱动,成功连接服务器");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//[]paras,通过?赋值方式可以防止漏洞注入方式,保证安全性

public ResultSet query(String sql,String []paras)
{
try {
ps=ct.prepareStatement(sql);
//对sql的参数赋值
for(int i=0;i<paras.length;i++)
{
ps.setString(i+1, paras[i]);
}
//执行查询
rs=ps.executeQuery();// 执行更新并返回操作数据库行数
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
System.out.println("rs="+rs);
//返回结果集
return rs;
}
//关闭资源的方法
public void close()
{
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值