السلام عليكم ورحمة الله وبركاته
كما هو معروف أن CachedRowSet يمثل قواعد البيانات غير المتصل , وهو تحميل البيانات إلى الذاكرة
أما JdbcRowSetImpl فيمثل قواعد البيانات المتصل . وانا حاليا أتعامل مع هذا النوع , ولكن مشكلته أنه يتصرف وكأنه غير متصل !!
مثال :
import com.sun.rowset.JdbcRowSetImpl;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.RowSet;
/**
*
* @author mohand
*/
public class MainProgram {
private static ResultSetMetaData metadata;
private static RowSet rs;
static final String DATABASE_URL = "jdbc:derby://localhost:1527/COLLAGE_DB";
static final String USERNAME = "mohand";
static final String PASSWORD = "mohand";
public static void main (String args [])
{
try {
rs = new JdbcRowSetImpl(DATABASE_URL, USERNAME, PASSWORD);
Add_Student("UUU", "AAA", "HHHH");
Display();
DeleteRow(2);
Display();
} catch (SQLException ex) {
Logger.getLogger(MainProgram.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void Add_Student(String s1 , String s2 , String s3) throws SQLException
{
System.out.println(rs.toString());
rs.setCommand("SELECT * FROM STUDENT");
rs.execute();
rs.moveToInsertRow();
rs.updateString(2,s1);
rs.updateString(3,s2);
rs.updateString(4,s3);
rs.insertRow();
rs.moveToCurrentRow();
rs.updateRow();
}
public static void DeleteRow(int rowNum) throws SQLException
{
rs.absolute(rowNum);
rs.deleteRow();
rs.last();
}
public static void Display () throws SQLException
{
metadata = rs.getMetaData();
int numberOfColumns = metadata.getColumnCount();
System.out.println();
for ( int i = 1; i <= numberOfColumns; i++ )
System.out.printf( "%-8s\t", metadata.getColumnName( i ) );
System.out.println();
while ( rs.next() )
{
for ( int i = 1; i <= numberOfColumns; i++ )
System.out.printf( "%-8s\t", rs.getObject( i ) );
System.out.println();
} // end while
}
}المخرجات :
STUDENT_ID FIRST_NAME SECOND_NAME MAJOR 65 UUU AAA HHHH 71 AAA BBB CCC 72 jjj ccc bbb 73 UUU AAA HHHH STUDENT_ID FIRST_NAME SECOND_NAME MAJOR
المشكلة هي أن بعد حذف صف . ﻻ يرجع لي بالبيانات الحالية
يجب علي إستخدام هذه الجملة في كل مرة أريد الحصول على أخر البيانات :
"SELECT * FROM STUDENT"
أليس إستخدام جملة SQL معين بشكل متكرر . يأثر في البرنامج و قواعد البيانات , وما هو الحل بنظرك
ملاحظة : بإفتراض أنك تتعامل مع قواعد بيانات كبيرة ﻻ يمكن تحميلها بالذاكرة
