我把几个重要的部分 分隔出来让各位高手帮忙第一部分连接等 void DBConnect(String url){
try {
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
System.out.println("driver:"+driver);
con =DriverManager.getConnection (url, "", "");
System.out.println("CONNECTED TO ---> "+ url);
}catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} void DBClose(){
try{
con.close();
}catch(SQLException e)
{
}
}
//加载语句
ResultSet queryDB(String qry){
try{
ResultSet rs=null;
Statement stmt= con.createStatement ();
//rs= stmt.executeUpdate(qry);
rs= stmt.executeQuery(qry);
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
} int queryDB2(String qry){
int count=0;
try{
Statement stmt= con.createStatement ();
count= stmt.executeUpdate(qry);
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return count;
}
第二部分
//到表中查询
String qry1="Select 姓名 地址 密码 from publishers where 姓名=? 地址=? 密码=?";
queryDB(qry1);
//建立PreparedStatement
PreparedStatement qry1QueryStat=con.prepareStatement(qry1); qry1QueryStat.setString(1,t1);
qry1QueryStat.setString(2,t2);
qry1QueryStat.setString(3,t3);//1,2,3是的几个宿主变量
qry1QueryStat.setString(4,t4); //ResultSet rs=qry1QueryStat.executeQuery();//得到结果 //String qry1="Select 姓名='"+t1+"'年龄'"+t2+"'地址='"+t3+"'密码='"+t4+"'from publishers";
//ResultSet qry1=queryDB("Select * from publishers where 姓名='"+t1+"' and 年龄='"+t2+"' and 地址='"+t3+"' and 密码='"+t4+"'");
//queryDB(qry1);
//这是控制重复的地方
if(rs.next())
{
System.out.println("输入内容与表中重复");
//TiSh ti=new TiSh();
}
//这里是把文本框的内容加入到表中
else
{
//加入表中的语句
String qry2="INSERT INTO publishers(姓名,年龄,地址,密码) VALUES('"+t1+"','"+t2+"','"+t3+"','"+t4+"')";
queryDB2(qry2);
}
}
catch(SQLException e1)
{ }
try {
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
System.out.println("driver:"+driver);
con =DriverManager.getConnection (url, "", "");
System.out.println("CONNECTED TO ---> "+ url);
}catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} void DBClose(){
try{
con.close();
}catch(SQLException e)
{
}
}
//加载语句
ResultSet queryDB(String qry){
try{
ResultSet rs=null;
Statement stmt= con.createStatement ();
//rs= stmt.executeUpdate(qry);
rs= stmt.executeQuery(qry);
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
} int queryDB2(String qry){
int count=0;
try{
Statement stmt= con.createStatement ();
count= stmt.executeUpdate(qry);
//System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return count;
}
第二部分
//到表中查询
String qry1="Select 姓名 地址 密码 from publishers where 姓名=? 地址=? 密码=?";
queryDB(qry1);
//建立PreparedStatement
PreparedStatement qry1QueryStat=con.prepareStatement(qry1); qry1QueryStat.setString(1,t1);
qry1QueryStat.setString(2,t2);
qry1QueryStat.setString(3,t3);//1,2,3是的几个宿主变量
qry1QueryStat.setString(4,t4); //ResultSet rs=qry1QueryStat.executeQuery();//得到结果 //String qry1="Select 姓名='"+t1+"'年龄'"+t2+"'地址='"+t3+"'密码='"+t4+"'from publishers";
//ResultSet qry1=queryDB("Select * from publishers where 姓名='"+t1+"' and 年龄='"+t2+"' and 地址='"+t3+"' and 密码='"+t4+"'");
//queryDB(qry1);
//这是控制重复的地方
if(rs.next())
{
System.out.println("输入内容与表中重复");
//TiSh ti=new TiSh();
}
//这里是把文本框的内容加入到表中
else
{
//加入表中的语句
String qry2="INSERT INTO publishers(姓名,年龄,地址,密码) VALUES('"+t1+"','"+t2+"','"+t3+"','"+t4+"')";
queryDB2(qry2);
}
}
catch(SQLException e1)
{ }
//到表中查询
String qry1="Select 姓名 地址 密码 from publishers where 姓名=? 地址=? 密码=?";
*****************************************
改为:
String qry1="Select 姓名 地址 密码 from publishers where 姓名='"+this.textField1+"' and 地址='"+this.textField2+"' and '"+this.textField3+"';然后执行这个SQL语句,如果表单的值和数据库完全相同,这个SQL会查询出一个NULL.如果是NULL:
if(...==null)
{
String sql02="insert into...";
}
public String getTextField2();等等;你那个TextField类是什么我没有用过,呵呵,见鬼2. label1.setText("姓名");
label2.setText("年龄");这是怎么回事?在BEAN中给LABEL字段赋值?BEAN不应该由你手工赋值的呀.
3.象你这么简单的一个功能,除了定义BEAN本身的字段之外,另外写一个方法,这个方法里面有5到6行语句就够了(而且if()这样的也算是一行),你出现了这么多语句,如果超过10行,完全违背了BEAN的使用规则,你重新找实例看看吧.这个BEAN你整个都不要了.重新去找到MVC模式的实例看看,这些实例我不提供,恕罪
另://这是控制重复的地方
if(rs.next())
{
System.out.println("输入内容与表中重复");
//TiSh ti=new TiSh();
}
这个什么意思?我没看懂。resultset.next是做了比较了吗?
用楼上的这位朋友的方法试试吧,不过说老实话,你对数据库做的操作太多,一行数据就要读取数据库数次,效率不太高,呵呵。
这样才可以。当然我这里的c和d字段都是字符串的。你可以先到后台数据库验证一下你所写的sql语句的正确性,我看你的connecting应该是没有什么问题的
chenxin790311(逍遥鱼)
SQL改改吧
{
System.out.println("输入内容与表中重复");
//TiSh ti=new TiSh();
}这个判断中间还应该加一个字段的判断,不过一般这个字段重复的判断应该交给数据库来处理的。
就他妈知道倒分!有个屁用!bruce1981(过客)
Bruce_1981(许真)
xuzhen1980(为中国软件振兴而努力)都是那个煞笔"许真",别不承认!
看下面的贴子,就知道他有没有倒分!
http://expert.csdn.net/Expert/topic/1483/1483350.xml?temp=1.162291E-05
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;public class test extends JFrame
{
Connection con;
String url = "jdbc:odbc:Xu";
ResultSet rs;
JPanel contentPane;
TextField textField1 = new TextField(10);
TextField textField2 = new TextField(10);
TextField textField3 = new TextField(10);
TextField textField4 = new TextField(10);
private Label label1 = new Label();
private Label label2 = new Label();
private Label label3 = new Label();
private Label label4 = new Label();
private Button button1 = new Button();
private Button button2 = new Button();
FlowLayout lay=new FlowLayout();
public test(){
Container c=getContentPane();
c.setLayout(lay);
setTitle("Frame Title");
label1.setText("姓名");
label2.setText("年龄");
label3.setText("地址");
label4.setText("密码");
button1.setLabel("添加");
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
button2.setLabel("取消");
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
});
Panel cc=new Panel();
Panel c1=new Panel();
Panel c2=new Panel();
Panel c3=new Panel();
Panel c4=new Panel();
cc.setLayout(new GridLayout(4,1));
c1.setLayout(new GridLayout(1,4));
c2.setLayout(new GridLayout(1,4));
c3.setLayout(new GridLayout(1,4));
cc.add(c1);
cc.add(c2);
cc.add(c4);
cc.add(c3);
c1.add(label1);
c1.add(label2);
c1.add(label3);
c1.add(label4);
c2.add(textField1);
c2.add(textField2);
c2.add(textField3);
c2.add(textField4);
c3.add(new Label());
c3.add(button1);
c3.add(button2);
c3.add(new Label());
c.add(cc);
DBConnect(url);
}
void DBConnect(String url){
try {
// Load the Driver
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
System.out.println("LOADED DRIVER ---> " + driver);
con =
DriverManager.getConnection (url, "", "");
System.out.println("CONNECTED TO ---> "+ url);
}catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
void DBClose(){
try{
con.close();
}catch(SQLException e)
{
}
}
ResultSet queryDB(String qry){
ResultSet rs=null;
try{
Statement stmt= con.createStatement ();
// Execute query using Statement, receive the ResultSet
rs= stmt.executeQuery(qry);
System.out.println("EXECUTED QUERY ---> " + qry);
}catch(SQLException e2){
}
return rs;
}
int updateDB(String updstr){
int count=0;
try{
Statement stmt= con.createStatement ();
count= stmt.executeUpdate(updstr);
}catch(SQLException e2){return 0;}
return count;
}
void button1_actionPerformed(ActionEvent e) {
String t1=textField1.getText().trim();
String t2=textField2.getText().trim();
String t3=textField3.getText().trim();
String t4=textField4.getText().trim();
//不可以为空
if(t1.equals("")||t2.equals("")||t3.equals("")||t4.equals(""))
{
System.out.println("输入内容不能为空");
}
else
{
try
{
//到表中查询
String qry1="Select * from publishers where 姓名='"+t1+"'";
rs=queryDB(qry1);
if(rs.next())
{
System.out.println("输入姓名与表中重复");
}
//这里是把文本框的内容加入到表中
else
{
//加入表中的语句
String updstr="INSERT INTO publishers(姓名,年龄,地址,密码) VALUES('"+t1+"','"+t2+"','"+t3+"','"+t4+"')";
updateDB(updstr);
}
}
catch(Exception e1)
{
DBClose();
}
}
}
void button2_actionPerformed(ActionEvent e) {
textField1.setText("");
textField2.setText("");
textField3.setText("");
textField4.setText(""); }
public static void main(String[] args)
{
test frame=new test();
frame.setSize(600,600);
frame.setVisible(true);
//frame.setVisible(true);
}} 这是他给我的代码