【问题标题】:How can I pass the table and field names as database query parameters?如何将表名和字段名作为数据库查询参数传递?
【发布时间】:2011-12-22 08:07:37
【问题描述】:

在下面的代码中,我有一个名为Prj_Genrate_idAssgn 的方法,其形式参数为String table, String Field_Name。如何将数据库表名(studentrecords)和字段名(Reg_no)作为参数(String table, String Field_name)传递?

import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class dbtable2 extends javax.swing.JFrame implements ActionListener {

    JFrame frame;
    //
    JLabel lname = new JLabel("STUDENT NAME");
    JLabel lreg = new JLabel("REGISTER NO");
    JLabel lmark1 = new JLabel("MARK1");
    JLabel lmark2 = new JLabel("MARK2");
    JLabel ltotal = new JLabel("TOTAL");
    JButton bsave = new JButton("SAVE");
    JButton bupdate = new JButton("UPDATE");
    JButton bdelete = new JButton("DELETE");
    JTextField tname = new JTextField(20);
    JTextField treg = new JTextField(20);
    JTextField tmark1 = new JTextField(20);
    JTextField tmark2 = new JTextField(20);
    JTextField ttotal = new JTextField(20);
    Connection conn = null;
    CallableStatement calstat = null;
    Statement st = null;
    ResultSet rs = null;
    static String str = "table";
    static String str1 = "Field_Name";
    PreparedStatement pr = null;

    public dbtable2() {

        //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame = new JFrame();
        tmark1.addKeyListener(new TxAdapter());
        tmark2.addKeyListener(new TxAdapter());
        bsave.addActionListener(this);
        bupdate.addActionListener(this);
        bdelete.addActionListener(this);

        JPanel pnl = new JPanel();
        pnl.add(lname);
        pnl.add(tname);
        pnl.add(lreg);
        pnl.add(treg);
        pnl.add(lmark1);
        pnl.add(tmark1);
        pnl.add(lmark2);
        pnl.add(tmark2);
        pnl.add(ltotal);
        pnl.add(ttotal);
        pnl.add(bsave);
        pnl.add(bupdate);
        pnl.add(bdelete);
        frame.add(pnl);
        frame.setSize(200, 100);
        frame.setVisible(true);

        initconn();

    }

    public Connection initconn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/records", "root", "root");
            String table = "CREATE TABLE studentrecord(student_name varchar(20),"
                + "Reg_no int(6) PRIMARY KEY,mark1 int(3), mark2 int(3))";
            st = conn.createStatement();
            //st.executeUpdate(table);
            //conn.close();
        } catch (Exception e) {
            System.out.println(e);
        }
        return conn;
    }

    public void Prj_Genrate_idAssgn(String table, String Field_Name) {
        try {
            String max = "select max(" + Field_Name + ") from" + table + ";";
            int max1 = Integer.parseInt(max);
            System.out.println(max1);

        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        dbtable2 dbtable2 = new dbtable2();
        dbtable2.Prj_Genrate_idAssgn(str, str1);
    }
}

【问题讨论】:

    标签: java mysql swing


    【解决方案1】:

    你应该在你的查询中添加一个空格,因为你手上肯定有一个 SQLException。

    来自

    "select max("+Field_Name+") from"+table+";";
    

    "select max("+Field_Name+") from "+table+";";
    

    【讨论】:

    • @Ayesha 很高兴听到。选择一个答案以关闭问题。
    【解决方案2】:

    您必须使用 java.sql.PreparedStatement,而不是使用 Statement。我再次编写了您的 Prj_Genrate_idAssgn 函数。 首先声明 PreparedStatement statement; 与声明部分的其余部分以及 java.sql.ResultSet 为 ResultSet rs; 因为这是您将从查询中获取返回值的地方。希望这可以帮助你:

     public void Prj_Genrate_idAssgn( String table,String Field_Name)
     {
       try
       {
         String max="select max("+ Field_Name + ") from " + table;
         statement = conn.prepareStatement(max);
         rs = statement.executeQuery();
         rs.next();
         int max1=Integer.parseInt(rs.getString(1));
         System.out.println(max1);
       }
       catch(Exception e)
       {
         System.out.println(e);
       }
    } 
    

    希望可以为您解决问题。

    问候

    【讨论】:

    • @Ayesha:很高兴知道这一点。问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多