0

请在此代码中找到错误,我正在尝试保存数据,但它没有使用 Eclipse、MySQL、64 位存储

错误

java.sql.SQLException: [MySQL][ODBC 5.2(w) Driver][mysqld-5.5.28]您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'database ('did','dname','dadress','salary','sex','specialist','cell#')VALUES 附近使用的正确语法(?,' 在第 1 行

package pk.pucit;
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

class DoctorsRecord {

public JFrame frm=new JFrame("Doctor's Record Information");
public  JButton btn1,btn2,btn3,btn4;
public  JLabel lbl1,lbl2,lbl3,lbl4,lbl5,lbl6,lblr;
public JTextField txt1,txt2,txt3,txt4,txt5,txt6,txt7;
public  JRadioButton rbtn1,rbtn2;
//frm.setBackground(Color.green);

public DoctorsRecord(){
    lbl1=new JLabel("Doctor ID");
    lbl2=new JLabel("Doctor's Name");
    lbl3=new JLabel("Address");
    lblr=new JLabel("Gender");
    lbl4=new JLabel("Salary");
    lbl5=new JLabel("Rank");
    lbl6=new JLabel("Ph #");


    txt1=new JTextField(7);
    txt2=new JTextField(7);
    txt3=new JTextField(7);
    txt4=new JTextField(7);
    txt5=new JTextField(7);
    txt6=new JTextField(7);
    txt7=new JTextField(7);

    /*rbtn1=new JRadioButton("Male");
    rbtn2=new JRadioButton("Female");*/

    btn1=new JButton("Save");
    btn2=new JButton("Search ");
    btn3=new JButton("Reset");
    btn4=new JButton("Cancel");

    JPanel pnl1=new JPanel();

    pnl1.add(lbl1);
    pnl1.add(txt1);
    pnl1.add(lbl2);
    pnl1.add(txt2);
    pnl1.add(lbl3);
    pnl1.add(txt3);
    pnl1.add(lblr);
    pnl1.add(txt7);
    pnl1.add(lbl4);
    pnl1.add(txt4);
    pnl1.add(lbl5);
    pnl1.add(txt5);
    pnl1.add(lbl6);
    pnl1.add(txt6);
    pnl1.setLayout(new GridLayout(8,1));

    JPanel pnl=new JPanel();

    pnl.add(btn1);
    pnl.add(btn2);
    pnl.add(btn3);
    pnl.add(btn4);
    pnl.setLayout(new GridLayout(1,2));

    frm.add(pnl1,BorderLayout.CENTER);
    frm.add(pnl,BorderLayout.SOUTH);

    //frm.setLayout(new GridLayout(10,1));
    frm.setBounds(400,100,400,500);
    frm.setVisible(true);
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    btn1.addActionListener(new ActionListener()
    {

        public void actionPerformed(ActionEvent ae){
            try{
                String id=txt1.getText();
                String name=txt2.getText();
                String add=txt3.getText();
                String sal=txt4.getText();
                String sex=txt5.getText();
                String sep=txt6.getText();
                String cell=txt7.getText();
                dataHandler(id,name,add,sal,sex,sep,cell);
            }
            catch(Exception e){
                System.out.println("Exception occur");
            }
        } 

    }
            );
}
    public void dataHandler(String id,String dn,String add,String sal,String   sex,String sep,String cell)throws ClassNotFoundException, SQLException{
        try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbc:odbc:Dbms", "root", "root");
    String query = "insert into database    ('did','dname','dadress','salary','sex','specialist','cell#')" +"VALUES (?,?,?,?,?,?,?)";
       PreparedStatement preparedStatement = con.prepareStatement(query);
        preparedStatement.setString(1, id);
        preparedStatement.setString(2, dn);
        preparedStatement.setString(3, add);
        preparedStatement.setString(4, sal);
        preparedStatement.setString(5, sex);
        preparedStatement.setString(6, sep);
        preparedStatement.setString(7, cell);
        preparedStatement.execute();
        con.close();
    }catch(Exception oc){
        System.out.println(oc.toString());
    }
    }
    public static void main(String []args){
        new DoctorsRecord();

    }
}
4

2 回答 2

1

你的查询有两个问题。

首先DataBase是一个保留关键字,你必须用反引号转义它。

String query = "insert into `database` (did,dname,dadress,salary,sex,specialist,`cell#`) 
                VALUES (?,?,?,?,?,?,?)";

其次,列名不能用单引号引起来。因为如果你这样做,它也会产生一个错误,告诉你没有找到该列。只有columnNamesandtableNames可以用反引号括起来。

于 2013-01-25T12:39:07.763 回答
0

数据库是保留关键字。您必须正确转义它才能将其用作表名。

INSERT INTO `database` ...
于 2013-01-25T12:37:24.613 回答