SSM学习04spring的数据库运行

学习spring开发数据库还是要导入额外的包
包结构:

导入包后编辑applicationContext.xml文件

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 4     http://www.springframework.org/schema/beans/spring-beans.xsd">
 5     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 6     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
 7     <property name="url" value="jdbc:mysql://localhost:3306/spring"></property>
 8     <property name="username" value="root"></property>
 9     <property name="password" value="123456"></property>
10     </bean>
11   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
12         <property name="dataSource" ref="dataSource" />
13     </bean>
14 
15 
16 </beans>

第一个bean用来配置数据源:定义数据库所需要的驱动名称,数据库url,数据库的账号密码。

第二个bean用来配置jdbc模板:加载数据源。

手动创建一个mysql数据库命名为spring。

测试代码:

 1 package com.zyk.database;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 import org.springframework.jdbc.core.JdbcTemplate;
 6 
 7 
 8 public class JdbcTemplateTest {
 9 
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
13         JdbcTemplate jdbcTemplate=(JdbcTemplate)applicationContext.getBean("jdbcTemplate");
14         jdbcTemplate.execute("create table account("+
15         "id int primary key,"+
16         "username varchar(50),"+
17         "balance double)");
18         System.out.println("创建成功");
19     }
20 
21 }

此次测试用JdbcTemplate的execute()方法创建数据表。

"create table account("+"id int primary key,"+"username varchar(50),"+"balance double)"

实验结果:

实验问题总结:

第一是xml文件的拼写一定要认真仔细,自己还不知道xml的自动补全后面的class文件,所以就手敲完了。

第二执行的sql建表语句要分清分号,逗号和括号。

第三自己在写JdbcTemplate类创建对象时,不知道为什么eclipse没有给我自动引入他在的包,还是自己手动import。

 --------------------------------------------------------分割线:spring进行update delete insert-------------------------------------------------------------------------------

创建account类,添加属性和get,set方法:

 1 package com.zyk.database;
 2 
 3 public class Account {
 4     private int id;
 5     private String username;
 6     private double balance;
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getUsername() {
14         return username;
15     }
16     public void setUsername(String username) {
17         this.username = username;
18     }
19     public double getBalance() {
20         return balance;
21     }
22     public void setBalance(double balance) {
23         this.balance = balance;
24     }
25     
26     @Override
27     public String toString() {
28         return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
29     }
30     
31     
32 }

AccountDao层接口写方法:

1 package com.zyk.database;
2 
3 public interface AccountDao {
4     public int add(Account account);
5     public int update(Account account);
6     public int delete(int id);
7 }

AccountDaoImpl:

 1 package com.zyk.database;
 2  
 3 import org.springframework.jdbc.core.JdbcTemplate;
 4  
 5 import com.sun.org.apache.bcel.internal.generic.NEW;
 6  
 7 public class AccountDaoImpl implements AccountDao {
 8     
 9     //声明JdbcTemplate属性及其setter方法
10     private JdbcTemplate jdbcTemplate;
11     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
12         this.jdbcTemplate = jdbcTemplate;
13     }
14 
15     @Override
16     public int add(Account account) {
17         //定义SQL数据库操作语句
18                 String sql= "insert into account(username,balance) value(?,?)";
19                 //定义数组来储存SQL语句中的参数
20                 Object obj =new Object[] {
21                         account.getUsername(),
22                         account.getBalance(),
23                 };
24                 //执行添加操作,返回的是受SQL语句影响的记录条数
25                 int num=this.jdbcTemplate.update(sql, obj);
26                 return num;
27     }
28 
29     @Override
30     public int update(Account account) {
31         //定义SQL数据库操作语句
32             System.out.println(account);
33                 String sql= "update account set username=?,balance=? where id=?;";
34                 //定义数组来储存SQL语句中的参数
35                 Object obj =new Object[] {
36                         account.getUsername(),
37                         account.getBalance(),
38                         account.getId()
39                 };
40                 //执行更新操作,返回的是受SQL语句影响的记录条数
41                 int num=this.jdbcTemplate.update(sql, obj);
42                 System.out.println(sql);
43                 return num;
44     }
45 
46     @Override
47     public int delete(int id) {
48         //定义SQL数据库操作语句
49                 String sql= "delete from account where id=?";
50                 //执行删除操作,返回的是受SQL语句影响的记录条数
51                 int num=this.jdbcTemplate.update(sql, id);
52                 System.out.println(sql);
53                 return num;
54     }
55  
56 }

测试用的

UpdateTest:

 1 package com.zyk.database;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class UpdateTest {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
11         AccountDao accountDao=(AccountDao)applicationContext.getBean("accountDao");
12         Account account=new Account();
13         System.out.println();
14         account.setId(2);
15         account.setBalance(0.005);
16         
17         account.setUsername("wangwu");
18         
19         int num=accountDao.update(account);
20         if(num!=0) {
21             System.out.println("success");
22         }else {
23             System.out.println("fail");
24         }
25     }
26 
27 }

DeleteTest:

 1 package com.zyk.database;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 import com.sun.xml.internal.bind.v2.model.core.ID;
 7 
 8 public class DeleteTest {
 9 
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
13         AccountDao accountDao=(AccountDao)applicationContext.getBean("accountDao");
14         int num=accountDao.delete(1);
15         if(num!=0) {
16             System.out.println("success");
17         }else {
18             System.out.println("fail");
19         }
20         
21     }
22 
23 }

AddTest:

 1 package com.zyk.database;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class AddTest {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
11         AccountDao accountDao=(AccountDao)applicationContext.getBean("accountDao");
12         Account account=new Account();
13         account.setUsername("tom");
14         account.setBalance(0.001);
15         System.out.println(account.getBalance());
16         int num=accountDao.add(account);
17         if(num>0) {
18             System.out.println("成功");
19         }else {
20             System.out.println("失败");
21         }
22     }
23 
24 }

问题:

我的添加和更新都会报sql语句的语法错误,但是我看着没有问题,现在还没解决,只有delete可以正常使用。

猜你喜欢

转载自www.cnblogs.com/2312947032zyk/p/10506320.html