Как передать имена таблиц и полей в качестве параметров запроса к базе данных? - PullRequest
1 голос
/ 22 декабря 2011

В приведенном ниже коде у меня есть метод с именем 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Вместо использования Statement вы должны использовать java.sql.PreparedStatement. Я снова закодировал твою 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);
   }
} 

Надеюсь, что это может решить вопрос для вас.

Привет

0 голосов
/ 22 декабря 2011

Вы должны добавить пробел в свой запрос, потому что у вас обязательно будет исключение SQLException.

от

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

до

"select max("+Field_Name+") from "+table+";";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...