2013-06-24 71 views
0

我的错误在哪里?JDBC显示所有数据

我在我的课中运行此方法,但发生异常。为什么?

public class d3 { 

Connection con; 
String dbName = "mydb"; 
String dbUsername = "root"; 
String dbPassword = "2323"; 
String dbUrl = "jdbc:mysql://localhost/"; 

public d3() { 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     System.out.println("Find database successfuly"); 
    } catch (Exception e) { 
     System.err.println("Unable to find and load driver"); 
     System.exit(1); 
    } 
} 

public void connectToDB() { 
    try { 
     con = DriverManager.getConnection(dbUrl, dbUsername, dbPassword); 
     System.out.println("Connect to database succesfully"); 
    } catch (SQLException e) { 
     System.out.println("Can not connect to database"); 
     System.exit(1); 
    } 
} 

public void excuteSQL() { 
    try { 
     Statement st1 = con.createStatement(); 
     ResultSet result1 = st1.executeQuery("select * from mytable"); 
     while(result1.next()){ 
      System.out.println(result1); 
     } 

    } catch (SQLException sqle) { 
     System.out.println("Can not excute sql statement"); 
     sqle.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    d3 ddd = new d3(); 
    ddd.connectToDB(); 
    ddd.excuteSQL(); 
} 
} 

输出:

Can not excute sql statement 

堆栈跟踪:

java.sql.SQLException: No database selected 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) 
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1557) 
    at JDBCtest.d3.excuteSQL(d3.java:40) 
    at JDBCtest.d3.main(d3.java:54) 
+0

请发布整个堆栈跟踪。将'sqle.printStackTrace();'添加到您的catch块中,然后再次运行它。 – Vrushank

+2

您是否试图在数据库管理系统上执行纯sql查询?你能提供堆栈跟踪吗? – reporter

+0

@Vrushank我加它 – Sajad

回答

1

你需要在URL

String dbUrl = "jdbc:mysql://localhost/mydb"; 

给数据库名,也可以在你的每个SQL的完全限定的表名查询

ResultSet result1 = st1.executeQuery("select * from mydb.mytable"); 
1

似乎有与SQLConnection问题...请验证连接建立成功。

你没有选择数据库。

+0

我把我的整个代码 – Sajad

+0

如何解决这个问题? – Sajad

+1

您需要在连接URL中添加数据库名称。像'jdbc:mysql:// localhost/myDB'或任何你给它的名字。另外,它连接在任何随机端口? – Vrushank

1

你dbUrl变量应该是这样的:

String dbUrl = "jdbc:mysql://localhost:3306/mydb"; 
1

你要么需要在URL中包括数据库名:

String dbUrl = "jdbc:mysql://localhost/theDatabase" 

,或者您需要明确设置数据库连接后:

try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost/", 
     username, password)) { 
    con.setCatalog("theDatabase"); 
    // querying etc 
} 

如果你已经知道你的数据库,并且只需要使用一个:只要指定它在连接网址:更容易每次调用setCatalog()