数据库访问编程实践:Python、Java与C的多数据库操作指南
立即解锁
发布时间: 2025-08-30 01:26:19 阅读量: 10 订阅数: 30 AIGC 


掌握SQL:从入门到实践
### 数据库访问编程实践:Python、Java 与 C# 的多数据库操作指南
在数据库编程领域,不同的编程语言和数据库管理系统(DBMS)有着各自独特的访问方式和特点。本文将详细介绍使用 Python、Java 和 C# 分别访问不同数据库的方法,包括查询构建、连接管理以及数据处理等方面的内容。
#### Python 数据库查询与结果处理
在 Python 中,我们可以通过以下步骤完成数据库查询和结果处理:
1. **构建参数列表**:首先创建一个列表,将查询所需的参数添加到该列表中。
2. **拆分名称并添加条件**:将输入的名称按空格拆分,为每个部分构建合适的查询条件,并将对应的参数添加到参数列表中。
3. **完成子查询**:使用自定义的评分函数对结果进行排序,并只保留第一个匹配的人员。
4. **添加输入名称到参数**:在完成查询之前,将输入的名称添加到参数列表中,以便传递给评分函数。
5. **打开游标并执行查询**:打开数据库游标,设置批量大小,然后使用参数执行查询。
6. **获取和显示结果**:使用 `fetchmany()` 方法获取一批行,将结果添加到显示区域,直到所有行都被检索完毕。如果没有找到匹配的电影,则显示相应的提示信息。
以下是示例代码:
```python
parameters.append(actor)
try:
cur = self.conn.cursor()
cur.arraysize = 20
cur.execute(query, parameters)
found = 0
rslt = cur.fetchmany()
while len(rslt) > 0:
for row in rslt:
self.listbox.insert(tkinter.END,
format(row[0], '35.35s')
+ ' ' + format(row[1], '20.20s')
+ ' ' + format(row[2], '30.30s')
+ ' ' + row[3])
found += 1
rslt = cur.fetchmany()
if found == 0:
self.listbox.insert(tkinter.END, '*** No films found ***')
except:
print("Unexpected error:" + str(sys.exc_info()))
```
#### Java 访问 Oracle 数据库
在 Java 中访问 Oracle 数据库,我们可以按照以下步骤进行:
1. **加载驱动**:使用 `Class.forName()` 方法加载 Oracle 驱动。
2. **调用登录窗口**:加载驱动成功后,调用登录窗口进行用户认证。
3. **读取配置文件**:从配置文件中读取数据库连接所需的信息,如主机名、端口号和数据库实例名等。如果配置文件不存在,则使用默认值。
4. **连接数据库**:在登录窗口中,获取用户输入的用户名和密码,设置连接参数,然后使用 `DBConnection.setConnection()` 方法连接到数据库。
5. **打开主窗口**:连接成功后,打开主窗口,用户可以在主窗口中输入演员名称进行电影搜索。
以下是相关代码示例:
```java
package ui;
import javax.swing.JOptionPane;
public class FilmsStarring {
public static void main(String arg[]) {
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch(Exception e) {
System.out.println(
"Cannot find the Oracle JDBC driver. Check the value of CLASSPATH.");
System.exit(1);
}
try {
new Login();
} catch(Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}
// Login.java 部分代码
prop = new Properties();
String fileName = "config.cfg";
url = new StringBuffer("jdbc:oracle:thin:@");
try {
InputStream is = new FileInputStream(fileName);
prop.load(is);
url.append(prop.getProperty("host")).append(":");
if (prop.getProperty("port") == null) {
url.append("1521:");
} else {
url.append(prop.getProperty("port")).append(":");
}
url.append(prop.getProperty("instance"));
} catch (Exception e) {
System.err.print("Warning : ");
System.err.println(e.getMessage());
String orasid = System.getenv("ORACLE_SID");
if (orasid != null) {
url.append("localhost:1521:").append(orasid);
} else {
System.err.println("Missing connection information");
System.exit(1);
}
}
// 登录按钮点击事件处理方法
public void actionPerformed(ActionEvent ae) {
String username = usrField.getText();
String password = new String(pwdField.getPassword());
Properties info = new Properties();
info.put("user", username);
info.put("password", password);
info.put("defaultRowPrefetch", "20");
try {
DBConnection.setConnection(url.toString(), info);
new SearchWindow();
this.dispose();
} catch (Exception conE) {
JOptionPane.showMessageDialog(this, conE.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
// DBConnection 类
public class DBConnection {
static Connection connection = null;
public static Connection getConnection() {
return connection;
}
public static void setConnection(String url,Properties info)
throws SQLException {
DBConnection.connection = DriverManager.getConnection(url, info);
connection.setAutoCommit(false);
}
}
```
#### Java 中的查询构建与数据处理
在 Java 的 `SearchWindow` 类中,我们需要构建复杂的查询语句,并处理查询结果。具体步骤如下:
1. **构建查询语句**:根据用户输入的演员名称,构建包含评分函数和子查询的 SQL 查询语句。在构建过程中,使用 `ArrayList` 存储查询参数。
2. **绑定参数并执行查询**:使用 `PreparedStatement` 对象绑定查询参数,然后执行查询,获取 `ResultSet` 对象。
3. **处理查询结果**:使用自定义的 `ResultSetModel` 类将 `ResultSet` 中的数据转移到程序对象中。
以下是相关代码示例:
```java
// SearchWindow 类中的 buildQuery 方法
private String buildQuery() {
StringBuffer s = new StringBuffer(100);
StringBuffer refname = new StringBuffer();
String[] nameArray = actor.getText().trim().split(" ");
for (int i = 0; i < nameArray.length; i++) {
refname.append(nameArray[i].toLowerCase());
}
if (parameters == null) {
parameters = new ArrayList<String>();
} else {
parameters.clear();
}
s.append("select m.title,\n\tctry.country_name||','||");
s.append("to_char(m.year_released) as origin,\n\t");
s.append("listagg(case c.credited_as\n\t\t");
s.append("when 'D' then trim(p.first_name||' '||p.surname)\n\t\t");
s.append("else null\n\t\tend,',')\n\t\t");
s.append("within group(order by p.surname,p.first_name)");
s.append(" as director,\n\t");
s.append("listagg(case c.credited_as\n\t\t");
s.append("wh
```
0
0
复制全文
相关推荐










