Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Проблема с созданием новой базы данных


Автор: WhiteDream 27.3.2006, 23:01
Взял пример из книги и вписал его Netbeans 5.0
Код
import java.net.URL;
import java.sql.*;
import java.io.*;

class Simple_Select {

 public static void main (String args[]) {
 
String url = "jdbc:odbc:dBase";
 String query = "SELECT * FROM my_table"; 
 try {
 Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
 DriverManager.setLogStream(System.out); 
 Connection con = DriverManager.getConnection (
 url, "", ""); 
  checkForWarning (con.getWarnings ()); 
 DatabaseMetaData dma = con.getMetaData ();
 Statement stmt = con.createStatement ();
  ResultSet rs = stmt.executeQuery (query);

 // Показать все колонки и ряды из набора результатов
 dispResultSet (rs);
 // Закрыть результирующий набор
 rs.close();
 // Закрыть оператор
 stmt.close();
 // Закрыть соединение
 con.close();
 }
 catch (SQLException ex) {
 while (ex != null) {
  ex = ex.getNextException ();
 }
 }
 catch (java.lang.Exception ex) {
 ex.printStackTrace ();
 }
 }
 private static boolean checkForWarning (SQLWarning warn) 
 throws SQLException {
 boolean rc = false;

 if (warn != null) {
 System.out.println ("\n *** Warning ***\n");
 rc = true;
 while (warn != null) {
 warn = warn.getNextWarning ();
 }
 }
 return rc;
 }
 //----------------------------------
 // dispResultSet
 // Показать таблицу полученных результатов
 //----------------------------------
 private static void dispResultSet (ResultSet rs)
 throws SQLException, IOException
 { 
     
 int i, length, j;
 String cp1 = new String("Cp1251"); 
  ResultSetMetaData rsmd = rs.getMetaData ();
 int numCols = rsmd.getColumnCount ();
 // Показать заголовок столбца
 for (i=1; i<=numCols; i++) {
 if (i > 1) System.out.print(",");
 //System.out.print(rsmd.getColumnLabel(i));
 }
 System.out.println("");
 
 boolean more = rs.next ();
 while (more) {

 // Цикл по столбцам
 
 for (i=1; i<=numCols; i++) { 

InputStream str1 = rs.getUnicodeStream(i); 
     byte str2[];
     byte str3[]; 
     int sizeCol = rsmd.getColumnDisplaySize(i);
     str2 = new byte[sizeCol+sizeCol]; 
     str3 = new byte[sizeCol+sizeCol];
     length = str1.read(str2); 
    
     int k=1;    
     for (j=1; j<sizeCol*2; j++) {
        if (str2[j] != 0) { 
            str3[k]=str2[j]; k=k+1; } } 
     
     String str = new String(str3,cp1);
     System.out.print(str);    
 }
 System.out.println("");

 // Загрузка следующего ряда в наборе

 more = rs.next ();
 }
 }
}

Netbeans выдает warning на следующие объявления:
DriverManager.setLogStream(System.out);
InputStream str1 = rs.getUnicodeStream(i);

При попытке запустить выдает ошибки:
Код

init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\Demon\Simple Select\build\classes
Note: C:\Documents and Settings\Demon\Simple Select\src\Simple_Select.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
compile:
run:
DriverManager.getConnection("jdbc:odbc:dBase")
    trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.odbc.JdbcOdbcDriver@19821f]
*Driver.connect (jdbc:odbc:dBase)
JDBC to ODBC Bridge: Checking security
No SecurityManager present, assuming trusted application/applet
JDBC to ODBC Bridge 2.0001
Current Date/Time: Tue Mar 28 01:50:04 YEKST 2006
Loading JdbcOdbc library
Allocating Environment handle (SQLAllocEnv)
hEnv=46666400
Allocating Connection handle (SQLAllocConnect)
hDbc=46666568
Connecting (SQLDriverConnect), hDbc=46666568, szConnStrIn=DSN=dBase
RETCODE = -1
ERROR - Generating SQLException...
SQLException: SQLState(IM002) vendor code(0)
java.sql.SQLException: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3074)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at Simple_Select.main(Simple_Select.java:20)
Closing connection (SQLFreeConnect), hDbc=46666568
Closing environment (SQLFreeEnv), hEnv=46666400
getConnection failed: java.sql.SQLException: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
BUILD SUCCESSFUL (total time: 2 seconds)

В чем проблема?

Автор: LSD 27.3.2006, 23:08
Проблема в том что у тебя нет ODBC алиаса dBase. Создай его и попробуй сконнектится снова.

Автор: powerOn 28.3.2006, 07:41
Цитата

Проблема в том что у тебя нет ODBC алиаса dBase. Создай его и попробуй сконнектится снова.


А создать его можно в Панель Управления -> Администрирование -> Источники данных (ODBC). smile

Автор: WhiteDream 28.3.2006, 12:46
Я поставил сервер Mysql 4.1 и Mysql control center, скачал mysql-connector-java-3.1.12-bin.jar.
С помощью control center замутил новую базу my_sql на root@localhost:3306, устновил пароль.
Затем в NetBeans зашел в Runtime, установил драйвер Mysql путем указания на мой mysql-connector
В драйвере написал: URL jdbc:mysql://localhost:3306/my_sql, user: root и пароль: password
Он нашел эту базу, подсоединился к ней и создал таблицу my_table.
Потом я переписал в программе следующие строки
Код
String url = "jdbc:mysql://localhost:3306/my_sql";
String query = "SELECT * FROM my_table"; 
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url, "root", "password");


Теперь в консоли выводиться следующее
Код
init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\Demon\Simple Select\build\classes
compile-single:
run-single:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at Simple_Select.main(Simple_Select.java:14)
BUILD SUCCESSFUL (total time: 1 second)

Я извиняюсь за лаймерский вопрос, но что вообще должно вывестить в консоле, если все сделать правильно?

Автор: LSD 28.3.2006, 20:58
Надо писать не Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); а Class.forName("com.mysql.jdbc.Driver");.
И нужно довавить библиотеку mysql-connector-java-3.1.12-bin.jar в твой проект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)