精华内容
下载资源
问答
  • 1)什么是JDBC?JDBC代表Java数据库连接。JDBC是与数据库进行通信并执行SQLquery的Java API。...3)如何将MySQL或Oracle与Java连接?推荐下我自己的Java学习群:515675832,不管你是小白还是大牛,小编我都挺欢...

    1)什么是JDBC?

    JDBC代表Java数据库连接。JDBC是与数据库进行通信并执行SQLquery的Java API。61d41c91d04ccb98001cae3fd3a8eeb3.png

    2)什么是JDBC驱动程序和可用的JDBC驱动程序数量?

    JDBC驱动程序包含帮助Java应用程序和数据库的类和接口。

    有4种类型的JDBC驱动程序。7a72c65f8059a51bbc9dfa0ab3126f9b.png

    3)如何将MySQL或Oracle与Java连接?2461202c66a9ce5de38742c5819f2b51.png

    推荐下我自己的Java学习群:515675832,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的Java资料和零基础入门教程,欢迎初学和进阶中的小伙伴。

    代码说明如下:

    Class.forName创建一个JDBC驱动程序实例,并使用DriverManager进行注册。

    getConnection()方法始终建立与数据库的连接。

    我们需要从上面的连接对象创建一个Statement对象。该语句将返回resultset对象。ResultSet.next()表示如果结果集合仍然返回行。

    4)哪个JDBC驱动是最快的驱动程序?

    类型4驱动程序或本机协议,纯Java驱动程序,是最快的驱动程序。

    5)什么是JDBC API组件?

    有四种类型的组件451a816a686fc5cfe649cf03162dee83.png

    6)什么是JDBC statements?

    有三种类型的JDBC语句,如下所示:statements:它将对数据库执行SQL查询(静态SQL查询)。

    Prepared Statement:当我们要重复执行SQL语句时使用。输入数据是动态的,并在运行时输入。

    Callable Statement:当我们要执行存储过程时使用。

    7)我们如何执行存储过程?

    可以使用JDBCcallable语句执行存储过程。以下是代码:b162a46920ded06d4378dddcaa459a39.png

    8)在Java中使用PreparedStatement有什么好处?

    Prepared Statement用于重复执行相同的SQL语句。即使使用“n”次,准备好的语句只能编译一次

    9)什么是ResultSet?

    java.sql.ResultSet接口意味着SQL查询的结果集。这意味着光标指向表的一行;它指向第一行之前。

    10)什么是ResultSet的类型?

    有三种类型的ResultSet可用。如果我们不声明任何ResultSet,这意味着我们正在调用TYPE_FORWARD_ONLYTYPE_FORWARD_ONLY:游标只能向前移动的类型。

    TYPE_SCROLL_INSENSITIVE:游标可以前后移动,但对修改不敏感。

    TYPE_SCROLL_SENSITIVE:游标可以向前和向后移动,但修改敏感

    11)解释JDBC中RowSet与ResultSet之间的区别?

    在与DB的ResultSet句柄连接中,我们不能将Result作为序列化对象。

    由于上述问题,我们无法通过网络传递Resultset。

    RowSet扩展了ResultSet接口,因此它保存了ResultSet中的所有方法。RowSet被序列化。

    因此,我们可以将Rowset从一个类传递给另一个类,因为它与数据库没有连接。

    12)为什么要在JDBC中使用setAutoCommit(false)?

    如果要关闭自动提交,请设置connection.setAutoCommit(false)

    13)JDBC中的数据库警告是什么?我们如何在JDBC中处理数据库警告?

    SQL警告或数据库警告是SQLException类的子类。我们可以通过在Connection,Statement和ResultSet上使用getWarnings()方法处理它

    14)我可以得到一个null ResultSet吗?

    不,我们不能得到null Resultset。如果下一个记录不包含行,ResultSet.next()可以返回null。

    15)元数据是什么意思?为什么我们使用它?

    元数据是指有关其他数据的数据或信息。我们使用元数据获取数据库产品版本,驱动程序名称,表和视图的总数。

    16)在JDBC中执行executeQuery,executeUpdate有什么区别?execute():它可以用于任何类型的SQL Query。

    executeQuery():它可以用于select查询。

    executeUpdate():它可以用于更改/更新表。

    17)什么是数据库连接池?使用连接池的优点?

    连接池意味着连接将被存储在缓存中,我们将来可以重用它们。

    优点:它更快

    连接池变得更容易诊断和分析数据库连接。

    18)DriverManager类的功能是什么?

    它是用户和驱动程序之间的接口。 DriverManager跟踪数据库和相应驱动程序之间的所有活动。

    19)批量更新的含义是什么?

    批量更新意味着一次执行一组SQL查询。

    批量更新只能用于插入,更新和删除,但不能用于选择查询。

    20)JDBC API中有多少包?

    JDBC API中提供了两种类型的软件包java.sql

    javax.sql

    21)execute,executeQuery和executeUpdate的返回类型是什么?execute的返回类型是Boolean

    executeQuery的返回类型是ResultSet对象

    executeUpdate的返回类型为int

    22)结果集(Result Set)的索引以0或1开始?

    结果集的索引以1开头。

    23)加载驱动程序时Class.forName的作用是什么?

    Class.forName创建一个JDBC驱动程序实例,并使用DriverManager进行注册。

    24)JDBC-ODBC Bridge是否是多线程?

    不,JDBC-ODBC Bridge使用synchronized方法来序列化对ODBC进行的所有调用。

    25)哪个接口处理JDBC中的事务管理?

    连接接口处理JDBC中的事务管理。它提供了commit(),rollback()等的方法

    26)为什么“No suitable driver”错误发生?

    当我们调用DriverManager.getConnection方法时,No suitable driver会发生

    可能会出现以下原因:

    在调用getConnection方法之前无法加载精确的JDBC驱动程序。

    它可能是无效或错误的JDBC URL。

    27)准备的Statements更快。为什么?

    准备的Statements执行比直接执行更快,因为Statements只被编译一次。准备Statements和JDBC驱动程序在执行期间彼此连接,并且没有连接开销。

    28)是否可以连接到多个数据库?使用单一statement可以更新还是从两个或三个数据库中提取数据?

    是的,可以同时连接到多个数据库,但这取决于具体的驱动程序。

    要从不同的数据库更新和提取数据,我们可以使用单个statement。但是我们需要中间件来处理多个数据库或单个数据库。

    29)告诉我setMaxRows(int)和SetFetchSize(int)之间的区别?setMaxRows(int):定义每个结果集可以包含多少行

    SetFetchSize(int):定义将从数据库读取的行数。

    30)告诉我特殊字符?

    一个特殊字符之前是一个转义字符。比如,SELECT NAME FROM TABLE WHERE NAME LIKE' _%'{escape''}

    31)数据库中“dirty read”的含义是什么?

    dirty read意味着“读取可能正确或可能不正确的值”。

    32)两段提交是什么意思?

    在分布式事务处理中使用两阶段提交。如果任何事务正在执行,并且会影响多个数据库。将使用两阶段提交来使所有数据库彼此同步。

    33)JDBC中有多少锁定系统?

    JDBC中提供了两种类型的锁定,我们可以处理多个用户。

    如果两个用户正在查看相同的记录,则不会进行任何锁定。如果一个用户正在更新记录,并且第二个用户也正在更新相同的记录。那时候我们要用锁。乐观锁(Optimistic Locking):只有当我们要“更新”时,才会锁定记录。

    悲观锁(Pessimistic Locking):它将锁定记录从“选择”来查看,更新和提交时间。

    34)JDBC中有什么异常类型?

    JDBC中有四种异常类型。batchUpdate异常

    数据截断

    SQL异常

    SQL警告

    35)给出使用JDBC连接数据库的步骤?

    使用JDBC连接数据库有两种方法1.使用DriverManager:

    它将在class.forName(驱动程序类)和Class.forName()的帮助下加载驱动程序类。

    后加载它将通过控件到DriverManager。

    DriverManager.getConnection()将创建连接以访问数据库。2.使用DataSource:

    对于DataSource,无需在JNDI的帮助下使用DriverManager。它将从Naming服务器查找DataSource。 DataSource.getConnection()方法将Connection对象返回给DB。

    36)解释JDBC架构?

    JDBC API支持数据库的2层和3层模型。

    在2层模型中,Java应用程序与数据源进行交互977b35e32fcb7c955cf651ead980be21.png

    在3层模式命令中,重定向到服务的“中间层”。之后,命令发送到数据源。60b407e883d190097202ac371a8ad861.png

    37)JDBC 4.0中有哪些新功能?

    新功能是:93d84569598633324b9be0c558829526.png

    38)JDBC中使用的是什么包?

    JDBC中使用8个包:838ec7ffcc66ded380ca5e5b02ba42da.png

    39)JDBC中有多少RowSet可用?

    有两种类型的RowSet可用:已连接 - 连接的RowSet对象即时连接到数据库。如果应用程序终止,则连接的RowSet对象也将终止。

    断开连接 - 断开的RowSet对象在执行所需查询后连接到数据库。

    40)连接(Connection)的意思是什么?

    连接接口包括与数据库交互的方法。

    41)解释JDBC Savepoint?

    保存点(Savepoint)表示当前事务可以回滚到的点。而不是将其所有更改转回来,它可以选择仅回滚其中的一些。

    42)列出使用DataSource的优点?

    数据源是管理员和程序员/开发人员之间的分工。

    管理员创建一个DataSource对象并将其绑定到JNDI注册表。程序员/开发人员从注册表中检索DataSource对象。然后它将建立与数据库的连接。

    43)为什么我们需要一个JdbcRowSet的原因,就像在ResultSet周围的包装器?

    我们可以使用ResultSet对象作为JavaBeans组件。

    JdbcRowSet也可以用作JavaBeans组件。这就是为什么它可以在设计或编译时创建和配置,并在运行时执行。

    所有jdbcRowSet对象都是可滚动和可更新的。

    44)我们可以查看一个结果集(result set)的方式有多少?

    有两种方法来查看ResultSetcolumn

    column index

    示例:getInt(String columnName),getInt(int columnIndex)

    45)可以更新结果集(result set)有多少种方式?

    以下方法可帮助更新result setd2738f75159022df143edc7131ad4f01.png

    46)为什么要用Java关闭数据库连接?

    作为最佳实践,我们必须关闭resultset,statement和connection 。如果connection来自池,则在关闭时,将连接发送回池以供重用。我们在finally {}块中这样做,因为如果发生任何异常,我们仍然有机会关闭。

    47)为什么在JDBC中使用blob数据类型?

    这些用于将大量数据存储到数据库中,如图像,电影等。

    48)如何在ResultSet中设置属性并发性?

    有两个并发级别

    CONCUR_READ_ONLY - 仅供阅读。

    CONCUR_UPDATABLE - 用于读取和更新。

    49)客户端和服务器数据库游标有什么区别?

    服务器端游标表示数据和结果保存在服务器上。只有当请求的数据被发送到客户端时。

    客户端游标表示发送到客户端位置的所有数据。

    50)如何使用JDBC将图像插入数据库?

    数据库中的图像使用BLOB数据类型,其中图像作为字节流存储。以下代码显示了如何将图像插入数据库。4a5662a5e2c5d4415d3267a196c3285f.png

    展开全文
  • 我想在学习java sql的东西时运行下面的代码,但是,我已经创建了数据库,并且从终端尝试了它的好处。将Eclipse连接mysql mac os x jdbc驱动程序1,我得到这个错误java.sql.SQLException: No suitable driver found...

    我想在学习java sql的东西时运行下面的代码,但是,我已经创建了数据库,并且从终端尝试了它的好处。将Eclipse连接到mysql mac os x jdbc驱动程序

    1,我得到这个错误

    java.sql.SQLException: No suitable driver found for jdbc:sql://localhost/books

    at java.sql.DriverManager.getConnection(DriverManager.java:602)

    at java.sql.DriverManager.getConnection(DriverManager.java:185)

    at Displayauthors.main(Displayauthors.java:20)

    2,我下载了“ODBC管理器”,我不知道为什么,并用它做什么,或者如果它有任何关系我是什么在这里做什么?

    3我已经下载了Connector/ODBC和Connector/J。我去了JRE参考库并添加了“mysql-connector-java-5.1.21-bin.jar”,并尝试了多平台版本的.tar.gz。我不知道我究竟在继续尝试什么,但没有成功。

    4-I尝试从eclipse转到数据库预期并添加新的连接MYSQL并包括.jar和东西,但仍然没有改变。

    5试图包括class.forName .....而且也没有。

    请问请帮助我了解这个过程或指导我设置这个清晰的例子,我明白了代码,但环境设置给我带来了困难。

    import java.sql.*;

    public class Displayauthors {

    static final String DATABASE_URL = "jdbc:sql://localhost/books";

    public static void main(String args[]){

    Connection connection = null;

    Statement statement = null;

    ResultSet resultset = null;

    try{

    connection = DriverManager.getConnection(DATABASE_URL, "deitel", "deitel");

    statement = connection.createStatement();

    resultset=statement.executeQuery("SELECT AuthorID,FirstName,LastName FROM Authors");

    ResultSetMetaData metadata = resultset.getMetaData();

    int numberofcolumns = metadata.getColumnCount();

    System.out.println("Authors table");

    for(int i=1;i<=numberofcolumns;i++){

    System.out.printf("%-8s\t", metadata.getColumnName(i));

    System.out.println();

    }

    }

    catch(SQLException sqlexception){

    sqlexception.printStackTrace();

    }

    }

    }

    展开全文
  • 一、数据库连接池 1.1 概念:其实就是一个容器(集合),存放数据库连接的容器。...1.2 好处: 1. 节约资源 2. 用户访问高效 1.3 实现: 1. 标准接口:DataSource javax.sql包下的 1. 方法: 获取连接:getConn...

    一、数据库连接池
    1.1 概念:其实就是一个容器(集合),存放数据库连接的容器。
    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
    1.2 好处:
    1. 节约资源
    2. 用户访问高效
    1.3 实现:
    1. 标准接口:DataSource javax.sql包下的
    1. 方法:
    获取连接:getConnection()
    归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接。
    2. 一般我们不去实现它,有数据库厂商来实现
    1. C3P0:数据库连接池技术
    2. Druid:数据库连接池实现技术,由阿里巴巴提供的
    1.4 C3P0:数据库连接池技术
    步骤:
    1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
    不要忘记导入数据库驱动jar包
    2. 定义配置文件:
    名称: c3p0.properties 或者 c3p0-config.xml
    路径:直接将文件放在src目录下即可。
    3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
    4. 获取连接: getConnection
    代码:
    //1.创建数据库连接池对象
    DataSource ds = new ComboPooledDataSource();
    //2. 获取连接对象
    Connection conn = ds.getConnection();
    1.5 Druid:数据库连接池实现技术,由阿里巴巴提供的
    1. 步骤:
    1. 导入jar包 druid-1.0.9.jar
    2. 定义配置文件:
    * 是properties形式的
    * 可以叫任意名称,可以放在任意目录下
    3. 加载配置文件。Properties
    4. 获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
    5. 获取连接:getConnection
    * 代码:
    //3.加载配置文件
    Properties pro = new Properties();
    InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream(“druid.properties”);
    pro.load(is);
    //4.获取连接池对象
    DataSource ds = DruidDataSourceFactory.createDataSource(pro);
    //5.获取连接
    Connection conn = ds.getConnection();
    1.5.1 定义工具类
    1. 定义一个类 JDBCUtils
    2. 提供静态代码块加载配置文件,初始化连接池对象
    3. 提供方法
    1. 获取连接方法:通过数据库连接池获取连接
    2. 释放资源
    3. 获取连接池的方法
    代码实现:

    public class JDBCUtils {
    
    			    //1.定义成员变量 DataSource
    			    private static DataSource ds ;
    			
    			    static{
    			        try {
    			            //1.加载配置文件
    			            Properties pro = new Properties();
    			            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
    			            //2.获取DataSource
    			            ds = DruidDataSourceFactory.createDataSource(pro);
    			        } catch (IOException e) {
    			            e.printStackTrace();
    			        } catch (Exception e) {
    			            e.printStackTrace();
    			        }
    			    }
    			
    			    /**
    			     * 获取连接
    			     */
    			    public static Connection getConnection() throws SQLException {
    			        return ds.getConnection();
    			    }
    			
    			    /**
    			     * 释放资源
    			     */
    			    public static void close(Statement stmt,Connection conn){
    			       /* if(stmt != null){
    			            try {
    			                stmt.close();
    			            } catch (SQLException e) {
    			                e.printStackTrace();
    			            }
    			        }
    			
    			        if(conn != null){
    			            try {
    			                conn.close();//归还连接
    			            } catch (SQLException e) {
    			                e.printStackTrace();
    			            }
    			        }*/
    			
    			       close(null,stmt,conn);
    			    }
    			
    			
    			    public static void close(ResultSet rs , Statement stmt, Connection conn){
    			
    			
    			        if(rs != null){
    			            try {
    			                rs.close();
    			            } catch (SQLException e) {
    			                e.printStackTrace();
    			            }
    			        }
    			
    			
    			        if(stmt != null){
    			            try {
    			                stmt.close();
    			            } catch (SQLException e) {
    			                e.printStackTrace();
    			            }
    			        }
    			
    			        if(conn != null){
    			            try {
    			                conn.close();//归还连接
    			            } catch (SQLException e) {
    			                e.printStackTrace();
    			            }
    			        }
    			    }
    			
    			    /**
    			     * 获取连接池方法
    			     */
    			
    			    public static DataSource getDataSource(){
    			        return  ds;
    			    }
    			
    			}
    
    

    二、Spring JDBC
    Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
    步骤:
    1. 导入jar包
    2. 创建JdbcTemplate对象。依赖于数据源DataSource
    * JdbcTemplate template = new JdbcTemplate(ds);
    3. 调用JdbcTemplate的方法来完成CRUD的操作
    * update():执行DML语句。增、删、改语句
    * queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
    * 注意:这个方法查询的结果集长度只能是1
    * queryForList():查询结果将结果集封装为list集合
    * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
    * query():查询结果,将结果封装为JavaBean对象
    * query的参数:RowMapper
    * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
    * new BeanPropertyRowMapper<类型>(类型.class)
    * queryForObject:查询结果,将结果封装为对象
    * 一般用于聚合函数的查询
    2.1 练习:
    * 需求:
    1. 修改1号数据的 salary 为 10000
    2. 添加一条记录
    3. 删除刚才添加的记录
    4. 查询id为1的记录,将其封装为Map集合
    5. 查询所有记录,将其封装为List
    6. 查询所有记录,将其封装为Emp对象的List集合
    7. 查询总记录数
    我们采用Junit单元测试,让方法独立执行:

    					 	//1. 获取JDBCTemplate对象
    				   		 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    						@Test
    				 	   public void test1(){
    			
    				        //2. 定义sql
    				        String sql = "update emp set salary = 10000 where id = 1001";
    				        //3. 执行sql
    				        int count = template.update(sql);
    				        System.out.println(count);
    
    					 	@Test
    				    	public void test2(){
    				        String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";
    				        int count = template.update(sql, 1015, "郭靖", 10);
    				        System.out.println(count);
    					}
    						
    						@Test
    				    	public void test3(){
    				        String sql = "delete from emp where id = ?";
    				        int count = template.update(sql, 1015);
    				        System.out.println(count);
    				    }
    						
    						//注意:这个方法查询的结果集长度只能是1
    						@Test
    				    	public void test4(){
    				        String sql = "select * from emp where id = ?";
    				        Map<String, Object> map = template.queryForMap(sql, 1001,1002);
    				        System.out.println(map);
    				        //{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
    				
    				    }
    					
    					@Test
    				    public void test5(){
    				        String sql = "select * from emp";
    				        List<Map<String, Object>> list = template.queryForList(sql);
    				    	    for (Map<String, Object> stringObjectMap : list) {
    				            System.out.println(stringObjectMap);
    				        }
    				    }
    
    					
    					@Test
    				    public void test6(){
    				        String sql = "select * from emp";
    				        List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
    				        for (Emp emp : list) {
    				            System.out.println(emp);
    				        }
    						
    					@ @Test
    				    public void test7(){
    				        String sql = "select count(id) from emp";
    				        Long total = template.queryForObject(sql, Long.class);
    						//封装为emp对象
    						String sql = "select * from emp";
    						template.qurryForObject(sql,new BeanPropertyRowMapper<>(emp.class));
    				        System.out.println(total);
    				    }
    				}
    
    
    
    				
    
    
    
    展开全文
  • 因为本学期开了一门《Java程序设计框架》课程,主要讲述java有关程序框架,其中讲到了mybatis框架.mybatis框架简单来说就是将JDBC技术集成化的一种框架,其好处在于不需要重复编写JDBC操作数据库的代码,一定程度上...

    因为本学期开了一门《Java程序设计框架》课程,主要讲述java有关程序框架,其中讲到了mybatis框架.

    mybatis框架简单来说就是将JDBC技术集成化的一种框架,其好处在于不需要重复编写JDBC操作数据库的代码,一定程度上方便了程序员操作数据库,但是需要程序员对于SQL语句相当熟悉才行。

    有关mybatis框架的具体内容目前还在学习,所以会在之后逐步将内容更新完善,下面先总结一下在配置mybatis框架时遇到的问题、错误及相应解决方法。

    因为授课老师使用的教学环境是:

    1.Myecplise(具体版本未知,不再本次内容范围内)

    2.mySQL5.7.17(虽然数据库版本比较老了,不过兼容性问题基本没有)

    3.navicat for mysql 11.2.7 (数据库图形化操作工具,较mysql自带的编辑器来说更容易建库建表操作数据,便于之后练习)

    之后,再来看看我的配置环境:

    1.Ecplise EE 4.6.3(之前学习JSP使用的java环境,装有Tomcat)

    2.mySQL8.0(最新版本)

    3.navicat for mysql 15(最新版本)

    学习软件的伙伴们大概都知道使用工具最好不建议使用最新版,特别是需要几个工具搭配使用时,例如本次使用java连接sql的操作。但因为本人不想再重新配置mysql数据库,所以呢,就决定解决一个接一个的问题吧。(其实个人感觉出现的问题不算很多……)

    问题①  出现提示sql版本不匹配

    Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client

    百度翻译后是这样的:

    57ce2724b8e3a5ef08533c2f9b110bb8.png

    经过排查发现,我安装的mysql数据库版本是8.0,但是在我的java工具中配有的mysql连接驱动板版本是

    406de74f6f68c82d92fa7f1ff429c2e0.png

    4b476cbc8386192630a99d2054cf7f7f.png

    下载完驱动包之后,只把mysql-connector-java-8.0.20.jar解压出来并放到java工程的WEB-INF/lib目录下,然后通过Build Path->Configure Build Path 将驱动包配置到 Reference Libraries目录下,自此配置的问题算是暂时解决了。但是,还是没有办法运行,因为又报错了……

    问题②:连接数据库不兼容密码认证协议

    ER_NOT_SUPPORTED_AUTH_MODE……

    错误意思表示客户端不支持认证协议,通过百度,找到了解决方法,还是不兼容的问题,因为mysql最新版中更改了默认的密码认证协议。

    ff3ceed7383042b50f01da81f2de2465.png

    修改mysql密码协议配置之后,再次尝试运行测试程序,又报错了。

    问题③:提示不识别编码格式

    Error querying database.  Cause: java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.

    百度翻译如下:

    354c88d935e84b66dca60d7b43b74713.png

    查询了百度,发现了解决方法,就是在mybatis框架的xml配置文件中的url路径加入?useUnicode=true&characterEncoding=utf8

    ea2e5e59e718826deafdc62d76b52fdd.png

    这段代码同样是从网上寻找的,网上可能还有其他的编码内容,这里以解决问题为主,暂不做过多研究。本以为问题马上解决了,谁知新的问题又出现了……

    问题④:SQL服务器时区识别错误

    Error querying database.  Cause: java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

    百度翻译如下:

    1e0afd725988c805e169971988de349f.png

    依然上网百度资料,发现有很多说法是在mybatis框架下的xml配置文件中的url后面加入时区配置代码,但是经过尝试,发现问题没有解决,但是意外发现了一个解决方法,虽然目前还不清楚此方法是如何解决问题的,不过还是以解决问题为主进行,之后在慢慢研究。

    此问题的解决方法是:

    3893ef011b6500d737d97086e87c8ad0.png

    这里说明一下,这个mysql-connector-java-5.1.10-bin.jar驱动包是授课老师为了教学方便发布到群里的,在文章开头提到过。在解决mysql连接驱动不匹配的问题中,加入了8.0的jar包并Build Path之后,我觉得没有必要删除这个5.1的jar包,而仅仅删除了5.1的Build Path,也就是说配置环境目录中只有最新版的8.0连接驱动环境,如下图所示:

    4ab30d94ee2e6bf50683bccf143d785e.png

    问题⑤:使用ecplise连接MySQL可能出现线程异常问题

    Exception in thread "main" java.lang.NullPointerException

    通过百度,找到了解决方法,就是在构建InputStream输入流对象时,需要读取xml配置文件,需要在xml配置文件前加上一个”\“,如下图所示:

    ed7abf34b3da629badef8774c48d2c1d.png

    以上这张截图是实现了Dao接口的getById方法,其中添加了许多显示语句,主要用于诊断问题源。

    目前,发现在Ecplise编程环境下创建输入流读取配置文件时需要在配置文件名前加上”\“,但是在Myecplise编程环境下可以不用加上”\“,不清楚问题在哪里,这里注意下即可。

    参考资料:https://blog.csdn.net/qq_41808387/article/details/100636977

    好的,至此,程序成功运行!

    cb80d25c21052a0494656efa7e7036d5.png

    拓展:在运行结果中发现出现了Warning,虽然不影响运行结果,但是作为初学者来说,还是要了解一下是什么意思。

    百度翻译如下:

    1885ac6311fb0b4acc03dde187145e74.png

    后记:拓展这部分内容,上课时讲到过,但是因为某些原因错过了,在学习了解之后会更新出这部分内容说明及应对措施。

    展开全文
  • 文章目录●kafka一、介绍二、架构topicpartitions●kafka集群安装一、上传解压二、配置环境变量(伪分布式不用分发至其他节点)三、修改配置文件四、启动●kafka连接java创建生产者,消费者java创建生产者java创建...
  • 学习笔记输出来源:拉勾教育Java就业急训营修改时间:2021年1月21日 作者:pp_x 邮箱:pp_x12138@163.com @[toc]数据库连接池什么是数据库连接池采用数据库连接池避免开发中频繁的创建连接和销毁链接过程,提高性能...
  • 存储过程和函数:类似于java中的方法 好处: 1、提高代码的重用性 2、简化操作 / #存储过程 / 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少...
  • JDBC(Java Database Connectivity) java应用程序和数据库的连接技术 JDBC是sun公司推出的一套用于访问不同数据库的规范或标准(一组接口或抽象类)、java.sql.* 二、好处 1、开发人员不用记多套APi,减轻了开发压力 ...
  • Java Web学习12(JDBC)

    2020-08-14 21:18:54
    JDBC一、JDBC的概念二、JDBC的好处三、JDBC的使用步骤四、获取mysql连接方式一方式二方式三方式四方式五 一、JDBC的概念 JDBC(Java Database Connectivity) java应用程序和数据库的连接技术 JDBC是sun公司推出的一套...
  • 类似于java中的方法好处:1、提高代码的重用性2、简化操作存储过程含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,...
  • 存储过程和函数:类似于java中的方法 好处: 提高代码的重用性 简化操作 一、存储过程 含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句 提高代码的重用性 简化操作 减少了编译次数并且减少了和...
  • Mysql

    2021-03-17 14:22:51
    Java数据结构--图一、为什么要学习数据库数据库的好处二、数据库相关概念数据库存储数据的特点四、初始MySQLMySQL服务的启动和停止MySQL服务的登录和退出MySQL的常见命令MySQL的语法规范SQL的语言分类SQL的常见命令5...
  • 说明:都类似于java中的方法,将一组完成特定功能的逻辑语句包装起来,对外暴露名字 好处: ①提高重用性 ②sql语句简单 ③减少了和数据库服务器连接的次数,提高了效率 1.存储过程 (1)创建 create procedure ...
  • 存储过程和函数,类似于java中的方法 好处: 1、提高代码的重用性 2、简化操作 存储过程 含义:一组预先编译好的SQL语句的集合,理解为批处理语句 好处: 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且...
  • MySQL—B站学习总结—存储过程和函数 sql中的存储过程和函数类似java中的方法 好处: 提高了sql语句的重用性,减少了开发程序员的压力 提高了效率,简化操作 减少了传输次数 含义: 一组经过预先编译的sql语句的...
  • 全称:Java Database Connectivity ,是Java和数据库的连接技术 规范:抽象类或接口 java.sql包下的一组接口或抽象类 javax.sql包下的一组接口 好处: ①减轻了开发压力 ②提高了代码的维护性 演示JDBC的使用步骤 //...
  • JavaGuide :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 advanced-java :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。 ...
  • 直蹦主题继续由我带领各位读者学习MySql基础最后部分存储过程与函数与流程控制。存储过程的创建#存储过程和函数存储过程和函数:类似于java中的方法好处:1.提高代码的重用性2.简化操作#存储过程含义:一组预先编译好的...
  • MYbatis框架Java数据库框架 可以在网上搜索Mybatis手册自己学习 使用这个框架的好处就是,不用再写麻烦的dao包,操作数据库的代码大大简化 新建项目 ​ 然后导入mybatis架包和连接数据库的连接包 我这里是jdbc 新建...
  • oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
  • JAVA学习,是一条漫长的道路 java学习体悟 Java与C/C 的区别 Java语言中字符的处理 java在Linux下的web应用 Java正则表达式详解 java中关于html的转换 Java中利用散列表实现股票行情的查询 Java中文问题...
  • 超详细JDBC学习

    2020-04-29 16:47:18
    ​ JDBC又叫数据库连接,顾名思义就是把应用程序(java)和数据库相连接。JDBC 提供一套规范的接口,这样的好处就是为了减少各个数据库接口的参差不齐(比如mysql一个接口,oracle一个接口),使用JDBC后,无论mysql...
  • 二、JDBC连接MySql方式 下面是使用JDBC连接MySql的一个小的教程 1、查找驱动程序 MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此...
  • mysql存储过程和函数的学习 目录 存储过程 1.1 创建存储过程 1.2 调用存储过程 1.2 删除存储过程 1.3 查看存储过程的信息 函数 2.1 函数创建过程 2.2 函数调用 3.2 查看函数 3.3 删除函数 存储过程和函数: 类似于...
  • 1、含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率存储过程和函数:类似于java中的方法好处:1、提高代码...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    可以使用AND或OR、NOT等连接相关的条件 计算次序可以通过圆括号()来明确地分组。不要过分依赖默认计算次序,使用圆括号()没有坏处,它能消除二义性。 and:条件与 如 SELECT prod_id,prod_price,prod_name FROM...
  • 思维导图 和java相关的 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) ...
  • B/S模式带来了巨大的好处: 开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了...
  • PHP教程 初级教程

    2009-08-19 13:10:00
    Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

java连接mysql学习好处

java 订阅
mysql 订阅