KANSAS CITY, Mo. -- Danny Duffy walked briskly to the mound to start the seventh inning Saturday night, ready to throw his first warm-up pitch before anybody else on his team had even taken the field.

The Royals left-hander was in that kind of rhythm.

Duffy went on to retire the next two batters he faced before Baltimore's Adam Jones finally ended his bid for a perfect game with a single up the middle. Still, it was the best outing of his career, and came on a night when the Kansas City's scuffling offense needed it.

Billy Butler drove in the only run in the first inning in the 1-0 win over the Orioles.

"I started to feel it in the seventh a little bit," Duffy said of his tantalizing perfect bid, "but I didn't think about it because my job is to get outs."

Others started to think about it, though.

"You keep thinking, 'Boy, he's got really good stuff," said Royals manager Ned Yost, who was ejected during a tense ninth inning. "He gets through the fourth and the fifth and into the sixth and you think, 'Boy, he's got really, really good stuff.'"

Duffy gave up a single to Nelson Cruz to start the eighth, but Wade Davis retired the next three batters. All-Star close Greg Holland allow a hit and two walks to load the bases with two outs in the ninth, then calmly struck out Cruz for his 11th save of the season.

"We found a way to get back in it in the ninth and had the right guys at the plate," said Orioles bench coach John Russell, who was acting manager as Buck Showalter attended his daughter's graduation. "We scraped and scrapped. We still found a way to make it interesting."

Bud Norris (2-4) was the hard-luck loser, allowing four hits and a walk in 7 1/3 innings.

The lone run he allowed came in the first, when Nori Aoki led off with a single, stole second and then scored on Butler's single to center. The hit ended a 0-for-10 slump, and gave Kansas City only its second run in the first three games of the four-game set.

"The story of the day is about Duffy. That was unbelievable," Butler said. "That gives you a glimpse of what he could be like every time out."

Duffy missed most of last season while recovering from Tommy John surgery, and he began this season in the bullpen after losing the competition for a rotation spot in spring training. But he was forced back into the rotation a few weeks ago, when Bruce Chen landed on the disabled list with a back injury, and has pitched so well that he may have claimed the spot for good.

After struggling with control most of his first three seasons, Duffy has finally started to harness his stuff. He allowed one run on two hits in four innings in his first start May 3 against Detroit, and one run on two hits in six innings last week in Seattle.

He wound up losing both games when the Royals failed to score a run for him.

Perhaps with that in mind, Duffy kept the Orioles off the scoreboard entirely. He never got close to allowing a hit until Caleb Joseph hit a liner at third baseman Mike Moustakas to end the sixth inning, and Alex Gordon made a spectacular diving catch on Nick Markakis's flyball to lead off the seventh. Duffy then struck out Manny Machado before Jones delivered his single.

"I heard somebody say this is the type for, like, a perfect game," said the Orioles' Caleb Joseph. "Right after that, somebody said, `Jonesy is about to rip one right here.'"

The crowd gave Duffy a standing ovation after the hit, and then another when he exited the game. Duffy sheepishly waved his cap in appreciation as he entered the dugout.

"I was just trying to stay calm," Duuffy said. "Mechanics will come through on their own if you trust your stuff, you don't overdo anything. And we were on the attack all day."

NOTES: Jones has a 12-game hitting streak. ... The Royals have had four no-hitters in their history, the last by Brett Saberhagen against the White Sox on Aug. 26, 1991. The Orioles have not been no-hit since Sept. 1, 2007, when Clay Buchholz accomplished the feat for Boston. ... Royals RHP James Shields and Orioles RHP Ubaldo Jimenez start Sunday's series finale.