JAVAはJDBCを使用してmysqlデータベースのピットに接続します!!
1.ソースコード表示
package com.xuanji.lesson01;
import java.sql.*;
//我的第一个jdbc程序
public class JDBCFirstDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");//固定写法,加载驱动
//2.用户信息和url
String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username="root";
String password="******";//密码不便展示
//3.连接成功,返回数据库对象
Connection connection= DriverManager.getConnection(url,username,password);
//4.执行SQL的对象
Statement statement = connection.createStatement();
//5.执行SQL的对象去执行SQL,可能存在结果,查看返回结果
String sql="SELECT * FROM sp_type";
ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,结果集中封装了我们全部的查询出来的结果
while(resultSet.next()){
System.out.println("type_id="+resultSet.getObject("type_id"));
System.out.println("type_name="+resultSet.getObject("type_name"));
System.out.println("delete_time="+resultSet.getObject("delete_time"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
}
これはソースコードで一見問題ありません。。。。
クリックして実行すると、恐ろしいことが始まり、多くのエラーが報告されます。。。。
2.エラーを実行します。!!
3.エラーを分析し、コードを変更します
最初にエラーメッセージを見てみましょう
3.1最初に:
クラス ` com.mysql.jdbc.Driver 'をロードしています。これは非推奨です。新しいドライバクラスは ` com.mysql.cj.jdbc.Driver 'です。ドライバーはSPIを介して自動的に登録され、ドライバークラスを手動でロードする必要は通常ありません。
この文は、ドライバークラスcom.mysql.jdbc.Driverを正常にロードしなかったことを思い出させます
次に、ドライバークラスがcom.mysql.cj.jdbc.Driverディレクトリにある必要があることを示すプロンプトが表示されます。次に、最初にこのエラーを見つけ、まずcom.mysql.jdbc.Driverをcom.mysql.cj.jdbcに変更します。運転者
(バージョンの問題、com.mysql.jdbc.Driverを直接使用する場合、問題はありません。ええと、バージョンに問題がないことを証明しています...)
3.2 2番目の段落のエラー
スレッド「メイン」の例外java.sql.SQLException:サーバーのタイムゾーン値「 й ʱ 」が認識されないか、複数のタイムゾーンを表します。タイムゾーンサポートを利用する場合は、サーバードライバーまたはJDBCドライバー(「serverTimezone」構成プロパティを介して)を構成して、より具体的なタイムゾーン値を使用する必要があります。
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
でcom.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
でcom.mysql.cj.jdbcで.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError .java:73)
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.cj.jdbc.ConnectionImpl 。<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.xuanji.lesson01.JDBCFirstDemo.main(JDBCFirstDemo.java:15)
原因:com.mysql.cj.exceptions.InvalidConnectionAttributeException:サーバーのタイムゾーン値「 й ʱ 」が認識されないか、複数のタイムゾーンを表します。タイムゾーンサポートを利用する場合は、サーバードライバーまたはJDBCドライバー(「serverTimezone」構成プロパティを介して)を構成して、より具体的なタイムゾーン値を使用する必要があります。 java.lang.struct でのsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:ref)の sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)の
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
で.newInstance(Constructor.java:423)
com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
でcom.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
でcom.mysql.cj.util.TimeUtil.getCanonicalTimezoneで(TimeUtil.java:132)at
com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2118)
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2142)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310)
com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:967)で
com.mysql.cj.jdbc.ConnectionImpl.createNewIOで( ConnectionImpl.java:826)
... 6つ以上
2番目と3番目の段落は基本的に同じ意味なので、一緒に話しましょう~~
まずエラーレポートを見て、サーバー時間がエラーを報告するポイントに到達します。??
それを注意深く読んでください、それは私たちのデータベースとシステムの間でタイムゾーンに違いがあるということを私たちに伝えています。
この問題を解決するには???とてもシンプル
この問題は、JDBC接続のURLにserverTimezone = GMTを追加することで解決できます。GMT+ 8タイムゾーンを使用する必要がある場合は、GMT%2B8(2Bは「+」の16進数のASCIIコードで、「%2B」は「+」)を書き込む必要があります。 ”)、それ以外の場合は空として解析されます。
4.変更されたコード
これらのエラーを最初に修正します。修正されたコードは次のとおりです。
package com.xuanji.lesson01;
import java.sql.*;
//我的第一个jdbc程序
public class JDBCFirstDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//固定写法,加载驱动
//2.用户信息和url
String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT";
String username="root";
String password="******";//密码不便展示
//3.连接成功,返回数据库对象
Connection connection= DriverManager.getConnection(url,username,password);
//4.执行SQL的对象
Statement statement = connection.createStatement();
//5.执行SQL的对象去执行SQL,可能存在结果,查看返回结果
String sql="SELECT * FROM sp_type";
ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,结果集中封装了我们全部的查询出来的结果
while(resultSet.next()){
System.out.println("type_id="+resultSet.getObject("type_id"));
System.out.println("type_name="+resultSet.getObject("type_name"));
System.out.println("delete_time="+resultSet.getObject("delete_time"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
}
今すぐ実行!!
5.実行結果:
成功!!!!エラーは報告されません、効果は私たちが望むものです!!!!