2.DbManager db = x.getDb(daoConfig)
这里我要告诉大家的是,数据库里面表的创建的时间,只有在你对数据库里面的 *** 作涉及到这张表的 *** 作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD *** 作,但是只要我们想进行一张表的CRUD *** 作,我们必须先执行上面的2步,通俗点说就是必须拿到一个Dbmanger这个对象,我为什么这么说呢?那么咱们就先看一下DbManger的庐山真面目吧。
DbManager部分源码如下:
[java] view plain copy print?
public interface DbManager extends Closeable {
DaoConfig getDaoConfig()
SQLiteDatabase getDatabase()
/**
* 保存实体类或实体类的List到数据库,
* 如果该类型的id是自动生成的, 则保存完后会给id赋值.
*
* @param entity
* @return
* @throws DbException
*/
boolean saveBindingId(Object entity) throws DbException
/**
* 保存或更新实体类或实体类的List到数据库, 根据id对应的数据是否存在.
*
* @param entity
* @throws DbException
*/
void saveOrUpdate(Object entity) throws DbException
/**
* 保存实体类或实体类的List到数据库
*
* @param entity
* @throws DbException
*/
void save(Object entity) throws DbException
/**
* 保存或更新实体类或实体类的List到数据库, 根据id和其他唯一索引判断数据是否存在.
*
* @param entity
* @throws DbException
*/
void replace(Object entity) throws DbException
///////////// delete
void deleteById(Class<?>entityType, Object idValue) throws DbException
void delete(Object entity) throws DbException
void delete(Class<?>entityType) throws DbException
void delete(Class<?>entityType, WhereBuilder whereBuilder) throws DbException
///////////// update
void update(Object entity, String... updateColumnNames) throws DbException
void update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames) throws DbException
///////////// find
<T>T findById(Class<T>entityType, Object idValue) throws DbException
<T>T findFirst(Class<T>entityType) throws DbException
<T>List<T>findAll(Class<T>entityType) throws DbException
<T>Selector<T>selector(Class<T>entityType) throws DbException
DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException
List<DbModel>findDbModelAll(SqlInfo sqlInfo) throws DbException
///////////// table
/**
* 删除表
*
* @param entityType
* @throws DbException
*/
void dropTable(Class<?>entityType) throws DbException
/**
* 添加一列,
* 新的entityType中必须定义了这个列的属性.
*
* @param entityType
* @param column
* @throws DbException
*/
void addColumn(Class<?>entityType, String column) throws DbException
///////////// db
/**
* 删除库
*
* @throws DbException
*/
void dropDb() throws DbException
/**
* 关闭数据库,
* xUtils对同一个库的链接是单实例的, 一般不需要关闭它.
*
* @throws IOException
*/
void close() throws IOException
///////////// custom
void execNonQuery(SqlInfo sqlInfo) throws DbException
void execNonQuery(String sql) throws DbException
Cursor execQuery(SqlInfo sqlInfo) throws DbException
Cursor execQuery(String sql) throws DbException
}
通过DbManager这个类我们知道主要它做了以下几件事情:
1.getDaoConfig 获取数据库的配置信息
2.getDatabase 获取数据库实例
3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)
4.replace 只有存在唯一索引时才有用 慎重
5.delete *** 作的4种方法(删除数据)
6.update *** 作的2种方法(修改数据)
7.find *** 作6种方法(查询数据)
8.dropTable 删除表
9.addColumn 添加一列
10.dropDb 删除数据库
项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下。spring的配置文件是在容器启动的时候就加载到内存中的,如果手动改了application.xml,我们必须要重新启动服务器配置文件才会生效。而在spring中提供了一个类WebApplicationContext,这个类可以让你获得一些bean,可以修改内存中的信息,我就是通过这个类来实现的。下面是我具体的代码。
package com.southdigital.hospital
import java.io.IOException
import javax.servlet.ServletContext
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.springframework.web.context.WebApplicationContext
import org.springframework.web.context.support.WebApplicationContextUtils
import com.mchange.v2.c3p0.ComboPooledDataSource
public class ChangeSpringConfig extends HttpServlet
{
private String ipAddress = "127.0.0.1"
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response)
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//先取得servleContext对象,提供给spring的WebApplicationUtils来动态修改applicationContext.xml
ipAddress = request.getParameter("ipAddress")
System.out.println(ipAddress)
ServletContext servletContext = this.getServletContext()
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext)
ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource")
cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh")
}
}
注意:通过这种方法修改applicationContext.xml文件的时候用c3p0,而不可以用dbcp,dbcp不支持动态修改读取到内存里面的数据。
spring 3.1已经支持了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)