以下哪种方法更适合关闭SqlDataReader:
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
{
}
reader.Close();
reader.Dispose();
Run Code Online (Sandbox Code Playgroud)
要么
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
}
Run Code Online (Sandbox Code Playgroud)
或者还有另一种关闭方法?
我在浏览时找到了通用DAO接口的代码:
public interface GenericDAO<T, ID extends Serializable> {
Class<T> getEntityClass();
T findById(final ID id);
List<T> findAll();
List<T> findByExample(final T exampleInstance);
List<T> findByNamedQuery(
final String queryName,
Object... params
);
List<T> findByNamedQueryAndNamedParams(
final String queryName,
final Map<String, ?extends Object> params
);
int countAll();
int countByExample(final T exampleInstance);
T save(final T entity);
boolean delete(final T entity);
}
Run Code Online (Sandbox Code Playgroud)
是否有任何理由特别留下具有默认访问修饰符的方法(类/包:是,子类/世界:否)?
PS:一个补充问题.ID通常是在不依赖于RDBMS(XML,平面文件......)的实现中找到的吗?
我从事多线程Java应用程序,它是一个提供REST服务的Web服务器,每秒大约1000个请求.我有一个关系数据库,我使用hibernate来访问它.该数据库每秒约有300-400个请求.从多线程的角度来看,我想知道DAO模式是否正确.
所以,有一个BaseModel类看起来像这样:
公共类BaseModelDAO {
protected Session session;
protected final void commit() {
session.getTransaction().commit();
}
protected final void openSession() {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
}
Run Code Online (Sandbox Code Playgroud)
}
然后我为数据库中的每个表都有一个DAO类:
公共类ClientDAOHibernate扩展BaseModelDAO实现ClientDAO {
private Logger log = Logger.getLogger(this.getClass());
@Override
public synchronized void addClient(Client client) throws Exception {
try {
openSession();
session.save(client);
commit();
log.debug("client successfully added into database");
} catch (Exception e) {
log.error("error adding new client into database");
throw new Exception("couldn't add client into database");
} finally {
session.close();
}
}
@Override
public synchronized Client …Run Code Online (Sandbox Code Playgroud) Dao<T,ID> Interface提供了许多DAO方法,例如update,create,...等
我读了Update方法
不会保存对外来对象或外部集合所做的更改.
刷新方法是否保存对外来对象或外部集合所做的更改?
一般来说,update和refresh方法之间的主要区别是什么?
我今天参加了考试,其中一个问题如下:
在实现MVC时,从哪个Web应用程序(控制器或视图)的园区我们应该调用在DAO实现中定义的方法?你应该解释一下.
我知道控制器负责将即将发出的http请求重定向到适当的视图,并且视图(JSP文件)应该使用DAO函数来获取信息并显示它.
我的讲师说我错了,控制员会对此作出回应.
当我问为什么时,他说"我应该听讲座".那么,为什么DAO应该从控制器调用而不是从视图中调用?
我正在为我的Dao Spring应用程序编写测试.我发现当我删除未保存的项目时,没有像我期望的那样调用异常,我不知道为什么.
模型:
@Entity
public class Ingredient {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String condition;
private int quantity;
public Ingredient() {
}
}
Run Code Online (Sandbox Code Playgroud)
该Dao实施:
@Override
public void delete(Object o) throws DaoException {
try {
Session session = mSessionFactory.openSession();
session.beginTransaction();
session.delete(o);
session.getTransaction().commit();
session.close();
} catch (Exception ex) {
throw new DaoException(ex, String.format("Problem deleting %s object (delete method).", o));
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试,期待DaoException:
@Test
public void testDeleteNotSavedThrowsDaoException() throws Exception {
Ingredient …Run Code Online (Sandbox Code Playgroud) 我正在学习使用 Android Studio,并且通常按照在线教程开发一个简单的应用程序,该应用程序使用 Room 等架构进行数据库访问和管理。我已经编写了 Entity 和 Dao 文件,但是在数据库文件中,对 Dao 文件的引用给出了警告“此处不允许使用修饰符‘抽象’”。我不确定这是否会随着项目的发展而在以后“修复”,但教程中没有提到类似的东西。
我尝试删除和重新生成文件,重新同步和交叉检查行与可比较的工作代码。谷歌搜索没有产生真正可比较的比较条件。
package org.ivanhoegc.ivanhoegolfscoringapp;
import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
@Database(entities = {Scoring.class}, version = 1)
public abstract class ScoringDatabase extends RoomDatabase {
private static ScoringDatabase instance;
public abstract ScoringDao scoringDao;
public static synchronized ScoringDatabase getInstance(Context context){
if(instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),
ScoringDatabase.class, "scoring_database")
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
代码是整个数据库定义文件,有问题的代码行是一个'public abstract ScoringDao etc
我们在android中使用Room数据库来存储数据。
现在,在 Dao 类中,我们都执行各种查询,如插入、选择、删除、更新等。
我想知道我们如何知道这些查询执行成功?
即如果我这样做:
appDatabase.userDao().insert(userData)
Run Code Online (Sandbox Code Playgroud)
如何通知用户数据已插入特定表并且操作成功?
是的,有没有可用的工具或插件可以让我们看到 Room 数据库的数据?(我已经用谷歌搜索过它,但对于设备监视器有点困惑)
请指导。
dao ×8
java ×4
android ×2
hibernate ×2
abstract ×1
android-room ×1
c# ×1
crud ×1
database ×1
default ×1
jsp ×1
ormlite ×1
spring ×1
spring-mvc ×1
sqlcommand ×1
sqlite ×1
syntax-error ×1
updates ×1