Заранее благодарим за любую помощь. Я создаю приложение Database - Client, используя java в Eclipse. Я использую MySQL 5.6 для моей базы данных. У меня есть метод создания и возврата объекта подключения, который я буду использовать для запроса базы данных, и метода для возврата всех строк в таблице в виде массива JSON. Проблема возникает в методе запроса при попытке вызвать метод подключения.База данных запросов Java Mysql с подключением
at: try { con.getDBConnection(); его сообщение, что есть ошибка для getDBConnection(); и предложения, которые он дает, - это добавить бросок в «con».
и я не могу получить метод запроса для компиляции из основного метода.
package binaparts.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.*;
import org.json.JSONArray;
import binaparts.util.ToJSON;
public class returnAllParts extends DBConnect{
public JSONArray queryReturnAllParts() throws Exception{
PreparedStatement query = null;
Connection con = null;
ToJSON converter = new ToJSON();
JSONArray json = new JSONArray();
try{
con.getDBConnection();
query = con.prepareStatement("SELECT * " + "from `parts list`");
ResultSet rs = query.executeQuery();
json = converter.toJSONArray(rs);
query.close();
}catch(SQLException SQLex){
SQLex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(con != null){
con.close();
}
}
return json;
}
}
дао код пакета ниже:
package binaparts.dao;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import com.mysql.jdbc.PreparedStatement;
public class DBConnect {
private Statement st = null;
private ResultSet rs = null;
private Connection con = null;
private PreparedStatement pst = null;
private String serverName = "localhost";
private String portNumber = "3306";
private String dbms = "mysql";
private Object userName = "dwilson";
private Object password = "abc";
public Connection getDBConnection() throws SQLException {
Properties connectionProps = new Properties();
connectionProps.put("user", this.userName);
connectionProps.put("password", this.password);
try{
con = DriverManager.getConnection("jdbc:" + this.dbms + "://" + this.serverName + ":" + this.portNumber + "/", connectionProps);
}catch(Exception ex){
ex.printStackTrace();
con = null;
}finally{
if(con != null){
System.out.println("Connected to database");
}
}
return con;
}
public String getUser(){
try{
DatabaseMetaData dmd = con.getMetaData();
String username = dmd.getUserName();
//System.out.println("Current User: "+username);
return username;
}catch(Exception ex){
System.out.println(ex);
ex.printStackTrace();
return null;
}
}
}
Основной метод ниже:
public class Main{
public static void main(String[] args){
DBConnect con = new DBConnect();
try {
con.getDBConnection();
System.out.println(con.getUser());
System.out.println(con.queryReturnAllParts());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Login loginGUI = new Login();
//MainFrames m = new MainFrames();
//m.displayGUI();
}
}
System.out.println(con.getUser());
делает работу
+1 хороший улов на продолжениях. –
переход от con. to con = исправлена проблема внутри метода returnAllParts - спасибо. Я планировал использовать класс returnAllParts для хранения методов запроса к базе данных, я просто тестировал исходный метод. Будет ли что-то в соответствии с требованиями DatabaseQuery более уместным? – Danny
@ Danny, это действительно зависит от того, что класс будет делать. Если 'returnAllParts' связан с любым типом запроса, то' DatabaseQuery' будет правильным именем, если оно просто связано с таблицей 'part list', тогда' PartListDAO' будет лучшим именем. –